如何使用python子进程正确控制命令行程序?

如何使用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) 
+0

根据您正在执行的shell,可能需要使用换行符来终止每个命令,例如, '我+'\ n''。 – cdarke

使用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()