使用子进程在Python中运行多个命令

时间:2015-04-15 03:40:22

标签: python subprocess

我的代码目前看起来像这样:

process1= r"C:\location\mybat.bat"
process2= r"C:\location\tools\gdal_translate  C:\temp\input.jpeg  C:\temp\output.pdf"

p1= subprocess.Popen([process1],stdout=subprocess.PIPE)
p2= subprocess.Popen([process2],stdin=p1.stdout)
p1.stdout.close()
output=p2.communicate()[0]

现在当我在命令提示符下运行这两个进程而不使用这个脚本时,它运行正常,但我想自动化它,所以它没有任何用户交互。

当我运行此脚本时,它返回:

  File "Myfile.py", line 52, in <module>
   p2= subprocess.Popen([process2],stdin=p1.stdout)
 File "C:\Python27\ArcGIS10.1\Lib\subprocess.py", line 679, in __init__
  errread, errwrite)
 File "C:\Python27\ArcGIS10.1\Lib\subprocess.py", line 893, in   _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

我不熟悉子进程,所以我想我的代码存在问题。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

对于p2,请尝试以下操作:

p2= subprocess.Popen(["C:\location\tools\gdal_translate", "C:\temp\input.jpeg", "C:\temp\output.pdf"],stdin=p1.stdout)

我用process2替换字符串列表。

答案 1 :(得分:0)

如果您的目标只是运行多个命令,请使用subprocess.call并且应该像这样简单:

import subprocess
process1 = r"C:\location\mybat.bat"
process2 = r"C:\location\tools\gdal_translate"
p1 = subprocess.call([process1])
p2 = subprocess.call([process2, 'C:\temp\input.jpeg  C:\temp\output.pdf'])