如何使用python子进程正确控制命令行程序?
问题描述:
我有一个外部命令行程序,我想通过python进行控制。当使用subprocess.open时,它会连续打印终端中的第一个命令。我想要一个接一个地输入一系列命令,然后在完成运行后终止程序。我尝试了几种不同的方法,但似乎没有任何工作。有人能告诉我我做错了什么,或者帮我修复我的代码吗?这是我有:如何使用python子进程正确控制命令行程序?
from subprocess import Popen, PIPE
program_location = /Fortran/Program/Here/Program
file_location = /Place/For/Input/File/File.EXP
command_list = [file_location, 'expedt', 'y', 'y', 'x', 'powpref', 'genles']
p = Popen(program_location, stdin=PIPE)
for i in command_list:
ps.stdin.write(i)
答
使用Popen.communicate
输入的线路发送给该进程,并等待它完成。
+0
最初我尝试了沟通,并且一直在终端打印出一行。 p.communicate(os.linesep.join(command_list))不起作用 – Ssrix
答
如果你想让所有的命令并行运行,你可以在多处理的帮助下运行subprocess.call。
import subprocess
import multiprocessing
cmd_1 = ["timeout", "15", "ping", "google.com"]
cmd_2 = ["timeout", "15", "ping", "*.com"]
cmds = [cmd_1, cmd_2]
for i in range(len(cmds)):
p = multiprocessing.Process(target=subprocess.call, args=(cmds[i],))
p.start()
根据您正在执行的shell,可能需要使用换行符来终止每个命令,例如, '我+'\ n''。 – cdarke