小编ryp*_*pel的帖子

python中导入错误

我收到以下错误

Traceback (most recent call last):
File "myemail.py", line 1, in <module>
  import smtplib
File "/usr/lib/python2.6/smtplib.py", line 46, in <module>
  import email.utils
File "/home/nikhil/Desktop/bujji/email.py", line 2, in <module>
ImportError: No module named MIMEMultipart
Run Code Online (Sandbox Code Playgroud)

当我运行代码示例时

我试图谷歌出错,但没有任何效果.

python python-import

13
推荐指数
3
解决办法
2万
查看次数

Python失去了对子进程的控制?

我正在使用一个商业应用程序,它使用Python作为其脚本API的一部分.提供的功能之一是所谓的App.run().调用此函数时,它会启动一个执行其余执行的新Java进程.(不幸的是,由于提供的Python模块是.pyc文件,我真的不知道它在幕后做了什么,而且许多Python函数都是SWIG生成的).

我遇到的麻烦是我正在将App.run()调用构建到一个更大的Python应用程序中,该应用程序需要做一些有保证的清理代码(关闭数据库等).不幸的是,如果子进程被Ctrl+ 中断C,它将中止并返回到命令行而不将控制权返回给主Python程序.因此,我的清理代码永远不会执行.

到目前为止,我已经尝试过:

  1. 使用atexit注册函数...不起作用
  2. 将清理放在类__del__析构函数中......不起作用.(App.run()在课堂内)
  3. 在主Python应用程序中为Ctrl+ 创建信号处理C程序...不起作用
  4. App.run()一个主题...结果后的内存故障Ctrl+C
  5. App.run()一个过程(从多处理)...不起作用

有什么想法会发生什么?

python linux subprocess

13
推荐指数
1
解决办法
370
查看次数

Python错误:ImportError:无法导入名称Akismet

我见过很多类似的错误,但我看不到适用于我的特定问题的解决方案.

我正在尝试使用我的PYTHONPATH上的Akismet模块,然后如果我启动交互式解释器,当我运行时 from akismet import Akismet(如docstring所说),我收到以下错误:

from akismet import Akismet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet
Run Code Online (Sandbox Code Playgroud)

python environment-variables python-import

12
推荐指数
2
解决办法
6万
查看次数

python subprocess和unicode execv()arg 2必须只包含字符串

我有一个django站点,我需要使用子进程调用脚本.当我使用ascii字符时,子进程调用工作但当我尝试发出utf-8编码的参数时,我收到一个错误:

execv() arg 2 must contain only strings.
Run Code Online (Sandbox Code Playgroud)

该字符串u'Wiadomo\u015b\u0107'来自postgres数据库.这个例子使用了波兰语.当我用英语单词运行时,我没有问题.

电话看起来像这样:

subprocess.Popen(['/usr/lib/p3web2/src/post_n_campaigns.py', '-c', u'bm01', '-1', u'Twoja', '-2', u'Wiadomo\u015b\u0107', '-3', u'', '-4', u'', '-5', u'', '-6', u'', '-m', u'pl', '-p', 'yes'])
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不确定如何处理字符串.奇怪的是,当我通过python解释器运行它时,这工作正常.

python unicode subprocess

12
推荐指数
1
解决办法
8903
查看次数

ImportError:没有名为xlwt的模块

我的系统:Windows,Python 2.7

我下载了一个软件包,并希望将其包含在我的脚本中.

解压缩包后,这是我的文件夹结构:

  • 工作
    • xlwt-0.7.3(包含a setup.py)
      • xlwt(包含__init__.py其中)

我的脚本从顶级(工作)文件夹运行.

import xlwt在我的脚本中使用产生:

ImportError: No Module named xlwt
Run Code Online (Sandbox Code Playgroud)

我如何导入xlwt?

python python-import importerror

12
推荐指数
1
解决办法
5万
查看次数

为什么导入子流程会改变我的输出?

我注意到以下使用Python 2.5.2(使用2.7不会发生):

#!/usr/bin/python

import sys

for line in sys.stdin:
   print line,
Run Code Online (Sandbox Code Playgroud)

输出:

$ echo -e "one\ntwo\nthree" | python test.py
$ one
$ two
$ three
Run Code Online (Sandbox Code Playgroud)

正如所料.但是,如果我导入subprocess到此脚本:

#!/usr/bin/python

import sys
import subprocess

for line in sys.stdin:
   print line,
Run Code Online (Sandbox Code Playgroud)

输出:

$ echo -e "one\ntwo\nthree" | python test.py
$ two
$ three
Run Code Online (Sandbox Code Playgroud)

第一行产出怎么了?

更新:

我想我可能已经发现了问题的根源.我有一个以time.py我的名字命名的文件cwd.time.pyc每次我使用subprocess导入运行脚本时都会创建A ,这表明./time.py它也正在导入.如果删除.pyctime.py文件,脚本会正常运行; 但是,仍有一个问题,为什么subprocess进口也会导致./time.py进口?

我已经将它缩小到更准确的线条time.py,导致奇怪的行为.我已经将工作目录和文件内容剥离到影响输出的内容:

test.py

#!/usr/bin/python

import …
Run Code Online (Sandbox Code Playgroud)

python python-2.5 python-import

12
推荐指数
1
解决办法
215
查看次数

Python 2.7 argparse:如何正确嵌套可选的mutally独占参数?

我的程序应包括以下选项,由argparse正确解析:

  1. 纯粹是可选的:[-h, --help][-v, --version]
  2. 相互排斥:[-f FILE, --file FILE][-u URL, --url URL]
  3. 选择是否--url可选:[-V, --verbose]
  4. 如果选择--file或被--url选中,则需要:[-F, --format FORMAT]

所需的使用模式是:

prog.py [-h] [-v] [-f FILE (-F FORMAT) | -u URL [-V] (-F FORMAT) ]
Run Code Online (Sandbox Code Playgroud)

-F施加到互斥组的成员的要求.
不确定它是否是一个位置.

所以应该可以运行:

prog.py -u "http://foo.bar" -V -F csv
Run Code Online (Sandbox Code Playgroud)

如果我忘记了-F(就像他应该的那样),解析器会尖叫.

到目前为止我做了什么:

parser = ArgumentParser(decription='foo')

group = parser.add_mutually_exclusive_group()    
group.add_argument('-f','--file', nargs=1, type=str, help='')
group.add_argument('-u','--url', nargs=1, type=str, help='')    

parser.add_argument('-V','--verbose', action='store_true', …
Run Code Online (Sandbox Code Playgroud)

python command-line-arguments python-2.7 argparse

12
推荐指数
1
解决办法
2347
查看次数

如何使用子进程模块与进程正确交互

我在使用子进程模块重定向另一个程序的stdio时遇到问题.只是从stdout读取导致挂起,并且Popen.communicate()可以工作,但它在读/写后关闭管道.实现这个最简单的方法是什么?

我在Windows上玩这个:

import subprocess
proc = subprocess.Popen('python -c "while True: print \'Hi %s!\' % raw_input()"',
                        shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                        stderr=subprocess.STDOUT)
while True:
    proc.stdin.write('world\n')
    proc_read = proc.stdout.readline()
    if proc_read:
        print proc_read
Run Code Online (Sandbox Code Playgroud)

python subprocess

11
推荐指数
1
解决办法
1万
查看次数

为什么导入错误在第二次导入时更改为"无法导入名称"?

这是一个神秘的python问题:

我正在开发一个python包,偶尔会报告导入错误ImportError: cannot import name ….一般不能导入的模块

  • 是可以进口的
  • 没有任何循环导入问题(我可以检测到).

通过这个简单的例子,我能够重现类似的效果:

mypkg/__init__.py:

    from . import module_a
    yarg  ## cause import error
Run Code Online (Sandbox Code Playgroud)

mypkg/module_a.py:

    print "imported module_a"
Run Code Online (Sandbox Code Playgroud)

现在我将尝试两次导入包.请注意,第二次导入时错误发生了变化:

>>> import mypkg
Module A imported
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mypkg/__init__.py", line 2, in <module>
    yarg
NameError: name 'yarg' is not defined
>>> import mypkg
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mypkg/__init__.py", line 1, in <module>
    from . …
Run Code Online (Sandbox Code Playgroud)

python python-import importerror

11
推荐指数
1
解决办法
7097
查看次数

请解释argparse模块中代码片段背后的推理

我正在查看内置argparse._AppendAction的源代码,它实现了"append"操作,并对它的实现方式感到困惑:

    def __call__(self, parser, namespace, values, option_string=None):
        items = _copy.copy(_ensure_value(namespace, self.dest, []))
        items.append(values)
        setattr(namespace, self.dest, items)
Run Code Online (Sandbox Code Playgroud)

要打破它:

  • _ensure_value就像dict.setdefault属性一样.也就是说,如果namespace有一个带有名称的属性,self.dest则返回它,如果没有,则将其设置为[]并返回.
  • _copy.copy(x)返回一个浅表副本.什么x是列表,它就像list(x)(但更慢).
  • 然后将该项附加到从中获取的列表的副本namespace.
  • 最后,该self.dest属性namespace被副本覆盖,这应该导致旧列表被垃圾收集.

为什么会以这样一种迂回而低效的方式,为每个附加物扔掉一个完整的清单?为什么这不够?

    def __call__(self, parser, namespace, values, option_string=None):
        items = _ensure_value(namespace, self.dest, [])
        items.append(values)
Run Code Online (Sandbox Code Playgroud)

python argparse

11
推荐指数
1
解决办法
223
查看次数