我试图使用popen启动一个子进程,该子进程一个接一个地调用两个命令(带有多个参数)。第二个命令依赖于第一个命令的运行,因此我希望使用一个子进程同时运行这两个命令,而不是生成两个进程并等待第一个。
但是我遇到了一些问题,因为我不知道如何给出两个命令输入,或者如何将命令作为一个对象分开。
另外,如果可能的话,我会尽量避免将shell设置为true。
这基本上就是我要做的:
for test in resources:
command = [
'pgh',
'resource',
'create',
'--name', test['name'],
'--description', test['description'],
]
command2 = [
'pgh',
'assignment',
'create',
'--name', test['name'],
'--user', test['user'],
]
p = Popen(command, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
print(stdout)
print(stderr)
根据我的理解,以下内容适用于您。若要在上一个完成后链接执行,请使用。
p1 = subprocess.Popen(command, stdout=subprocess.PIPE)
p2 = subprocess.Popen(command2, stdin=p1.stdout, stdout=subprocess.PIPE)
print p2.communicate()
在启动另一个命令之前,您必须启动命令并等待完成。您应该为每个命令重复执行此操作。
这可以按如下方式完成
ps = [ Popen(c, stdout=PIPE, stderr=PIPE).communicate()
for c in command]
请注意,无论天气如何,这都会启动下一个命令第一个命令成功或失败。如果你想启动下一个命令只有当前一个命令成功然后使用
def check_execute(commands):
return_code = 0
for c in commands:
p = Popen(c, stdout=PIPE, stderr=PIPE)
result = p.communicate()
yield result
return_code = p.returncode
if return_code != 0:
break
问题内容: 我对使用时如何搜索可执行文件感到困惑。如果给子进程提供了绝对路径,那么它就可以工作,但是我正在尝试使用相对路径。我发现,如果设置环境变量PYTHONPATH,则可以从该路径中获取导入的模块,并且PYTHONPATH在其中,但似乎对的行为没有帮助。我也尝试编辑将PYTHONPATH添加到的文件,就像这样 并验证了在以交互方式,与ipython或通过从命令行运行脚本启动python时,PY
问题内容: 我正在尝试使用PyQt为名为“ HandBrake”的视频转换器应用程序构建一个简单的GUI。 我的问题是,当我选择要转换的视频文件时,子进程Popen使用必需的args启动手刹应用程序,但是在等待手刹完成gui时会被阻止,因此我无法进行任何更改。(例如:我不能禁用按钮,也不能更改其文本) 我不是在寻找更复杂的解决方案,例如progressbar等,但是我想在等待程序完成转换的同时简单
问题内容: 我相信在环境稍有修改的情况下运行外部命令是很常见的情况。这就是我倾向于这样做的方式: 我感觉到有更好的办法了。看起来还好吗? 问题答案: 我认为如果你不打算为当前过程修改会更好:
前几天我注意到一个相当有趣的问题。 我在Windows服务器2008 RT上有一个Windows计划任务。此任务运行一个运行我构建的python脚本的批处理文件。在这个python脚本中有一个subprocess.Popen调用来运行其他几个批处理文件。但是在过去的几天里,我注意到该任务已成功运行,但辅助批处理文件没有。我知道python脚本成功运行是因为它创建的日志和它制作的辅助批处理文件使用的
问题内容: 我在看这个问题。 就我而言,我想做一个: 现在,我可以在命令行中检查“ ls文件夹/*.txt”的工作原理,因为该文件夹包含许多.txt文件。 但是在Python(2.6)中,我得到了: ls:无法访问*:没有此类文件或目录 我尝试做: 和其他变体,但似乎根本不喜欢角色。 还有其他逃生方法吗? 问题答案: 被您的外壳自动展开。如果您引用,则不起作用: 如果要获取与模式匹配的文件,请使用
我正在学习,但我对这段代码有点困惑: 输出: 如您所见,输出是格式化的。但是我不知道为什么结尾有字符和。 如果我在终端中运行此命令,则没有这些字符。 正常输出: 我怎样才能移除它们?