我收到以下错误
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作为其脚本API的一部分.提供的功能之一是所谓的App.run().调用此函数时,它会启动一个执行其余执行的新Java进程.(不幸的是,由于提供的Python模块是.pyc文件,我真的不知道它在幕后做了什么,而且许多Python函数都是SWIG生成的).
我遇到的麻烦是我正在将App.run()调用构建到一个更大的Python应用程序中,该应用程序需要做一些有保证的清理代码(关闭数据库等).不幸的是,如果子进程被Ctrl+ 中断C,它将中止并返回到命令行而不将控制权返回给主Python程序.因此,我的清理代码永远不会执行.
到目前为止,我已经尝试过:
__del__析构函数中......不起作用.(App.run()在课堂内)App.run()一个主题...结果后的内存故障Ctrl+CApp.run()一个过程(从多处理)...不起作用有什么想法会发生什么?
我见过很多类似的错误,但我看不到适用于我的特定问题的解决方案.
我正在尝试使用我的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) 我有一个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解释器运行它时,这工作正常.
我的系统:Windows,Python 2.7
我下载了一个软件包,并希望将其包含在我的脚本中.
解压缩包后,这是我的文件夹结构:
setup.py)
__init__.py其中)我的脚本从顶级(工作)文件夹运行.
import xlwt在我的脚本中使用产生:
ImportError: No Module named xlwt
Run Code Online (Sandbox Code Playgroud)
我如何导入xlwt?
我注意到以下使用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它也正在导入.如果删除.pyc和time.py文件,脚本会正常运行; 但是,仍有一个问题,为什么subprocess进口也会导致./time.py进口?
我已经将它缩小到更准确的线条time.py,导致奇怪的行为.我已经将工作目录和文件内容剥离到影响输出的内容:
test.py
#!/usr/bin/python
import …Run Code Online (Sandbox Code Playgroud) 我的程序应包括以下选项,由argparse正确解析:
[-h, --help]和[-v, --version][-f FILE, --file FILE]和[-u URL, --url URL]--url可选:[-V, --verbose]--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) 我在使用子进程模块重定向另一个程序的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_readRun Code Online (Sandbox Code Playgroud) 这是一个神秘的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) 我正在查看内置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 ×10
subprocess ×3
argparse ×2
importerror ×2
linux ×1
python-2.5 ×1
python-2.7 ×1
unicode ×1