import subprocess
result=subprocess.Popen(['perl','Hello.pl'],stdout=subprocess.PIPE,shell=True)
out,err=result.communicate()
print out
这是我的程序,我试图在python文件中运行perl
程序。我正在使用python 2.6v
。
在运行此文件时,它没有提供任何内容。
我是python的新手。
有人可以帮忙吗?
答案 0 :(得分:2)
来自communicate()
的{{3}}文档:
与流程交互:将数据发送到stdin。从stdout和。读取数据 stderr,直到达到文件结尾。 等待进程终止。
如果您想在不等待进程停止的情况下进行编写和阅读,请不要使用shell=True
。有关详细信息,请参阅此this。
使用此代码:
import subprocess
result=subprocess.Popen(['perl','Hello.pl'],stdout=subprocess.PIPE)
out,err=result.communicate()
print out
我如何从命令行读取一些参数并作为输入传递。对于Ex:perl Hello.pl some_variable_name
您可以使用doc
执行此操作Python代码:
import subprocess
import argparse
parser = argparse.ArgumentParser(description='Test Python Code')
parser.add_argument('first_name', metavar='FIRST_NAME', type=str,
help='Enter the first name')
parser.add_argument('second_name', metavar='SECOND_NAME', type=str,
help='Enter the second name')
# Parse command line arguments
args = parser.parse_args()
result=subprocess.Popen(['perl','Hello.pl',args.first_name,args.second_name],stdout=subprocess.PIPE)
out,err=result.communicate()
print out
Perl代码:
#!/usr/bin/perl -w
# (1) quit unless we have the correct number of command-line args
$num_args = $#ARGV + 1;
if ($num_args != 2) {
print "\nUsage: name.pl first_name last_name\n";
exit;
}
# (2) we got two command line args, so assume they are the
# first name and last name
$first_name=$ARGV[0];
$last_name=$ARGV[1];
print "First name: $first_name \nSecond name: $last_name\n";
示例输出: argparse