【发布时间】:2013-12-07 01:18:27
【问题描述】:
我有一个脚本,它通过 subprocess.Popen 模块调用另一个 python 脚本。但是由于我将参数存储在变量中
servers[server]['address']
servers[server]['port']
servers[server]['pass']
我无法执行命令
p = subprocess.Popen(["python mytool.py -a ", servers[server]['address'], "-x", servers[server]['port'], "-p", servers[server]['pass'], "some additional command"], shell=True, stdout=subprocess.PIPE)
【问题讨论】:
-
使用变量构建作为命令的字符串,或将它们作为参数列表传递。
-
将 Python 称为 Python 的子进程本身就是一种反模式;更好的解决方案通常是从子进程重构脚本,以便您可以
import它并直接从父脚本调用它。 在种情况下,您确实需要子进程(例如,如果脚本使用了您需要在父进程中以不同方式处理的信号),但通常情况下,您可能不应该这样做。 -
另外,正如
subprocess文档中已经指出的那样,如果您的用例已经由subprocess.run()和朋友中的一个高级函数处理,您应该避免使用Popen.基本上,除非您需要并行处理或与正在运行的进程交互,否则不要使用Popen(如果这样做,请注意等待Popen不适合您的子进程等)。
标签: python subprocess