我有一个外部命令行程序,我想通过python控制。使用subprocess.open时,它会在终端中连续打印第一个命令。我想一个接一个地输入一系列命令,然后在程序运行完毕后终止程序。我尝试了几种不同的方法,但似乎没有任何效果。有人能告诉我我做错了什么,还是帮我修改代码?这就是我所拥有的:
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)
答案 0 :(得分:0)
使用Popen.communicate
将输入行发送到流程并等待它完成。
答案 1 :(得分:0)
如果希望所有命令并行运行,可以在多处理的帮助下运行subprocess.call。
import subprocess
import multiprocessing
cmd_1 = ["timeout", "15", "ping", "google.com"]
cmd_2 = ["timeout", "15", "ping", "stackoverflow.com"]
cmds = [cmd_1, cmd_2]
for i in range(len(cmds)):
p = multiprocessing.Process(target=subprocess.call, args=(cmds[i],))
p.start()