问题出在哪里shell=True
。删除该参数,或将所有参数作为字符串传递,如下所示:
Process=Popen('./childdir/execute.sh %s %s' % (str(var1),str(var2),), shell=True)
Shell只会将您在第一个参数中提供的参数Popen
传递给流程,因为它会解释参数本身。看到类似的问题在这里回答。实际发生的情况是您的shell脚本没有参数,因此$ 1和$ 2为空。
Popen将从python脚本继承stdout和stderr,因此通常不需要为Popen提供stdin=
andstderr=
参数(除非您使用输出重定向运行该脚本,例如>
)。仅在需要读取python脚本中的输出并以某种方式对其进行操作时,才应执行此操作。
如果您只需要获取输出(并且不介意同步运行),则建议您尝试使用check_output
,因为获取输出比Popen
:
output = subprocess.check_output(['./childdir/execute.sh',str(var1),str(var2)])
print(output)
请注意,check_output
和check_call
的shell=
参数规则与相同Popen
。