jjzjj

python - 如果 "env"参数包含 unicode 对象,为什么 Popen 在 Windows 上会失败?

考虑这个例子:>>>importsubprocessassp>>>sp.Popen("notepad2.exe",env={"PATH":"C:\\users\\guillermo\\smallapps\\bin"})>>>sp.Popen("notepad2.exe",env={"PATH":u"C:\\users\\guillermo\\smallapps\\bin"})Traceback(mostrecentcalllast):File"",line1,inFile"C:\Python26\lib\subprocess.py",line633,in__init__errread,

python - 当 Popen 错误时,子进程的 Popen 关闭在另一个线程中使用的 stdout/stderr 文件描述符

当我们从Python2.7.3升级到Python2.7.5时,大量使用subprocess.Popen()的内部库的自动化测试开始失败。该库用于线程环境。调试问题后,我能够创建一个简短的Python脚本来演示在失败的测试中看到的错误。这是脚本(称为“threadedsubprocess.py”):importtimeimportthreadingimportsubprocessdefsubprocesscall():p=subprocess.Popen(['ls','-l'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=sub

python - 如何从 subprocess.Popen 获取退出代码?

对于下面的代码,p.returncode总是None。根据Popen.returncodedocumentation,这意味着该过程尚未完成。为什么我没有收到退出代码?importosimportsysimportsubprocesscmd=['echo','hello']p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)try:#Filterstdoutforlineiniter(p.stdout.readline,''):sys.stdout.flush()#Printstatusprint

python - subprocess.Popen 不是线程安全的吗?

以下简单脚本间歇性地卡在subprocess.Popen调用上(大约30%的时间)。除非use_lock=True,否则它永远不会挂起,这让我相信子进程不是线程安全的!预期行为是脚本在5-6秒内完成。要演示错误,只需运行“pythonbugProof.py”几次直到它挂起。Ctrl-C退出。您会看到“post-Popen”仅出现一两次,但不会出现第三次。importsubprocess,threading,fcntl,os,timeend_time=time.time()+5lock=threading.Lock()use_lock=Falsepath_to_factorial=os.

python - 子进程.Popen : how to pass a list as argument

我只需要有关如何正确做事的提示。假设我有一个名为script.py的脚本,它使用名称列表作为参数["name1"、"name2"等]。我想使用subprocess模块从另一个脚本调用这个脚本。所以我想做的是:myList=["name1","name2","name3"]subprocess.Popen(["python","script.py",myList])当然这不起作用,因为subprocess.Popen方法需要一个字符串列表作为参数。所以我考虑执行以下操作:subprocess.Popen(["python","script.py",str(myList)])现在进程开始了

python - 在 Python 中使用 subprocess.Popen 检查进程状态

如果我在Python中使用subprocess.Popen调用一个进程,如下所示:myproc=subprocess.Popen(...).communicate()查看其状态的正确方法是什么?不是它输出到stdout或stderr,而是它完成后的退出状态(例如0表示成功或另一个表示失败)? 最佳答案 returncode确实是答案,但解决方案不需要很复杂。process=subprocess.Popen(...)stdoutdata,stderrdata=process.communicate()printprocess.retu

python - subprocess.Popen.stdout - 实时读取标准输出(再次)

同样的问题。原因是-阅读以下内容后我仍然无法使其工作:Real-timeinterceptingofstdoutfromanotherprocessinPythonInterceptingstdoutofasubprocesswhileitisrunningHowdoIget'real-time'informationbackfromasubprocess.Popeninpython(2.5)catchingstdoutinrealtimefromsubprocess我的情况是我有一个用C编写的控制台应用程序,让我们以循环中的这段代码为例:tmp=0.0;printf("\ninput

python - 子进程 Popen 不适用于 pythonw.exe

当我使用pythonw.exe在Windows上运行以下脚本时,我希望能够获取stdout和stderr的内容:importsubprocessimportsysimportosimportstringimporttimetmpdir='c:/temp'cmd='dirc:'tmpfile="tmp_%f"%(time.time())tmpfile=os.path.normpath(os.path.join(tmpdir,tmpfile))tmpfile2=tmpfile+".bat"tmpfile3=tmpfile+".txt"fa=open(tmpfile2,'w')fa.writ

python - 在 C 或 Python 中使用 popen 绕过子进程输出的缓冲

我有一个关于popen(以及所有相关函数)的一般性问题,适用于所有操作系统,当我编写python脚本或一些c代码并从控制台(win或linux)运行生成的可执行文件时,我可以立即查看过程的输出。但是,如果我运行与fork进程相同的可执行文件,并将其标准输出重定向到管道中,则输出会在某处缓冲,通常最多4096字节,然后写入父进程可以读取的管道。以下python脚本将以1024字节的block生成输出importos,sys,timeif__name__=="__main__":dye='@'*1024foriinrange(0,8):printdyetime.sleep(1)下面的pyt

python - Windows 上使用 Python 和 subprocess.Popen() 的 Unicode 文件名

为什么会出现以下情况:>>>u'\u0308'.encode('mbcs')#UMLAUT'\xa8'>>>u'\u041A'.encode('mbcs')#CYRILLICCAPITALLETTERKA'?'>>>我有一个Python应用程序接受来自操作系统的文件名。它适用于某些国际用户,但不适用于其他用户。例如,这个unicode文件名:你'\u041a\u0433\u044b\u044b\u0448\u0444\u0442'不会使用Windows的“mbcs”编码(文件系统使用的编码,由sys.getfilesystemencoding()返回)进行编码。我得到“????????