如何通过python子进程调用执行perl脚本?
使用python中的如何通过python子进程调用执行perl脚本?,python,multithreading,subprocess,Python,Multithreading,Subprocess,使用python中的subprocess.call,我试图运行一个perl脚本,它在远程机器上运行一个代码来获取一些信息 我在机器A上有两个脚本—python和perl。python脚本使用subprocess.call方法调用perl脚本,方法是在循环中向其传递IP地址。两个脚本都运行得很好 但是,perl脚本是以串行顺序执行的(一个IP接一个IP) 实际行为- python脚本通过传递'198.168.1.2'来运行perl脚本 perl脚本执行代码并休眠15秒 python脚本然后通过传
subprocess.call
,我试图运行一个perl脚本,它在远程机器上运行一个代码来获取一些信息
我在机器A上有两个脚本—python和perl。python脚本使用subprocess.call方法调用perl脚本,方法是在循环中向其传递IP地址。两个脚本都运行得很好
但是,perl脚本是以串行顺序执行的(一个IP接一个IP)
实际行为-
- python脚本通过传递'198.168.1.2'来运行perl脚本
- perl脚本执行代码并休眠15秒
- python脚本然后通过传递“198.168.3.4”来运行perl脚本
- perl脚本执行代码并休眠15秒
因此,为这两个IP运行perl脚本总共需要30秒
预期行为-
- python脚本通过传递'198.168.1.2'来运行perl脚本
- 它没有等待perl脚本完成第一个IP,而是执行与“198.168.3.4”相同的perl脚本
因此,为两个IP执行perl脚本所花费的时间大致相同。这可以通过subprocess.Popen
实现。这将在不阻塞主线程的情况下运行进程。您的应用程序将如下所示:
def foo():
打印()
IPs=[“198.168.1.2”,“198.168.3.4”]
过程=[]
对于ip中的ip:
proc=subproces.Popen([“perl”,“script.pl”,ip],shell=True,stdin=PIPE)
过程追加(proc)
#等待所有进程完成
对于进程中的进程:
进程等待()
foo()
谢谢您的回答。我不知道为什么,但是proc=subproces.Popen([“perl”,“script.pl”,ip],shell=True,stdin=PIPE)
不起作用。但是,proc=Popen(“perlscript.pl'%s'%ip,shell=True,stdin=PIPE)
worked.Huh。可以无论如何,请你把我的答案标记为正确是公平的吗@爱尔兰共和军
# python code
def foo():
print()
IPs = ["198.168.1.2","198.168.3.4"]
for ip in IPs:
proc = call("perl script.pl '%s'" %ip, shell=True, stdin=PIPE)
foo()
# perl script
#!/usr/bin/perl
sub bar($)
{
//Code that ssh's to a remote-machine and gets required information
}
print(bar($ARGV[0]),"\n");
print("Sleeping for 15 sec\n");
sleep(15);
print("Done\n");