Tag: popen

pythonsubprocessPopen环境PATH?

我很困惑如何使用Popen()search可执行文件。 它的作品,如果给予subprocess的绝对path,但我试图使用相对path。 我发现,如果我设置环境variablesPYTHONPATH,那么我可以从该path中获取导入的模块,并且PYTHONPATH在sys.path ,但它似乎没有帮助subprocess.Popen的行为。 我也尝试编辑sitecustomize.py文件,添加PYTHONPATH到os.environ ,就像这样 # copy PYTHONPATH environment variable into PATH to allow our stuff to use # relative paths for subprocess spawning import os if os.getenv('PYTHONPATH') is not None and os.getenv('PATH') is not none: os.environ['PATH'] = ':'.join([os.getenv('PATH'), os.getenv('PYTHONPATH')]) 并通过交互方式,使用ipython或通过从命令行运行脚本来validation启动python时,PYTHONPATH成功显示在os.environ 。 但是, subrocess.Popen 仍然不在那里search可执行文件。 如果没有指定env kwarg,我认为它应该inheritance父母的环境? 接下来,我尝试给env明确,首先通过复制os.getenv ,其次是通过给env={'PATH': '/explicit/path/to/search/from'} ,它仍然没有find可执行文件。 现在我很难过 希望有个例子能更清楚地解释我的问题: /目录/ […]

在python脚本中启动一个shell命令,等待终止并返回到脚本

我有一个python脚本必须启动一个shell命令为每个文件在目录中: import os files = os.listdir(".") for f in files: os.execlp("myscript", "myscript", f) 这对第一个文件工作正常,但在“myscript”命令结束后,执行停止,不会回到python脚本。 我能怎么做? 在calling os.execlp()之前,我必须fork() calling os.execlp()吗?

是否有可能在没有线程或写入单独的文件/脚本的subprocess中运行函数

import subprocess def my_function(x): return x + 100 output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments print output #desired output: 101 我只find使用单独的脚本打开subprocess的文档。 有谁知道如何传递函数对象,甚至是传递函数代码的简单方法吗?

Popen和子程序之间的区别是什么(如何使用它们)?

我想从Python调用一个外部程序。 我用Popen()和call()来做到这一点。 两者有什么区别? 我的具体目标是从Python运行以下命令。 我不确定redirect是如何工作的。 ./my_script.sh > output 我读的文件 ,它说, call()是一个方便的function或快捷方式的function。 我们是否使用call()而不是Popen()来失去任何权力?

Python通过参数指定popen工作目录

有没有一种方法来指定python的subprocess.Popen()命令的运行目录? 例如: Popen('c:\mytool\tool.exe',workingdir='d:\test\local') 我的python脚本位于C:\programs\python 可以在D:\test\local目录下运行C:\mytool\tool.exe 。 如何设置subprocess的工作目录?

用pipe道连接几个Popen命令

我知道如何运行命令使用cmd = subprocess.Popen,然后subprocess.communicate。 大多数情况下,我使用一个用shlex.split标记的string作为Popen的“argv”参数。 “ls -l”的例子: import subprocess import shlex print subprocess.Popen(shlex.split(r'ls -l'), stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()[0] 但是,pipe道似乎不工作…例如,下面的示例返回注意: import subprocess import shlex print subprocess.Popen(shlex.split(r'ls -l | sed "s/a/b/g"'), stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()[0] 你能告诉我我做错了吗? 谢谢

如何从Python(2.7)中产生的进程中消除Windows控制台?

可能重复: 在没有控制台的情况下用Popen在pythonw中运行一个进程 我在Windows上使用python 2.7来使用dcraw和PIL自动化批量RAW转换。 问题是我打开一个Windows控制台,每当我运行dcraw(这发生每隔几秒钟)。 如果我使用.py作为脚本来运行脚本,那么它就不那么烦人了,因为它只能打开主窗口,但我更愿意只显示GUI。 我如此参与: args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile] proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE) ppm_data, err = proc.communicate() image = Image.open(StringIO.StringIO(ppm_data)) 感谢里卡多·雷耶斯 对于这个配方的小修改,在2.7中,似乎你需要从_subprocess获得STARTF_USESHOWWINDOW (如果你想要的东西可能不太容易改变,你也可以使用pywin32 ),所以对于后人来说: suinfo = subprocess.STARTUPINFO() suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)

Python popen命令。 等到命令完成

我有一个脚本,用popen shell命令启动。 问题在于脚本不会等到popen命令完成,然后马上继续。 om_points = os.popen(command, "w") ….. 我怎么能告诉我的Python脚本等待,直到shell命令完成?

如何使用subprocess和Popen从我的.exe获取所有输出?

我试图运行一个可执行文件,并使用subprocess.Popen捕获其输出; 然而,我似乎没有得到所有的输出。 import subprocess as s from subprocess import Popen import os ps = Popen(r'C:\Tools\Dvb_pid_3_0.exe', stdin = s.PIPE,stdout = s.PIPE) print 'pOpen done..' while: line = ps.stdout.readline() print line 它手动打开时打印两行比原来的exe文件less。 我尝试了另一种方法,结果相同: f = open('myprogram_output.txt','w') proc = Popen('C:\Tools\Dvb_pid_3_0.exe ', stdout =f) line = proc.stdout.readline() print line f.close() 任何人都可以请帮我得到exe的完整数据? 正如塞巴斯蒂安所问: 原始的exe文件最后几行o / p: -Gdd:通用计数(1 – 1000) -Cdd:在(0 […]

拦截正在运行的subprocess的stdout

如果这是我的subprocess: import time, sys for i in range(200): sys.stdout.write( 'reading %i\n'%i ) time.sleep(.02) 这是控制和修改子stream程输出的脚本: import subprocess, time, sys print 'starting' proc = subprocess.Popen( 'c:/test_apps/testcr.py', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE ) print 'process created' while True: #next_line = proc.communicate()[0] next_line = proc.stdout.readline() if next_line == '' and proc.poll() != None: break sys.stdout.write(next_line) sys.stdout.flush() print 'done' 为什么readline和communicate等待进程完成运行? 有一个简单的方法来实时传递(和修改)subprocess的标准输出吗? 顺便说一句,我已经看到了这一点 […]