我仍然是蟒蛇世界的新手,并且知道这应该是一个容易回答的问题。我在python中有一段脚本调用Perl中的脚本。此Perl脚本是一个SOAP服务,用于从网页中提取数据。一切都很好,并输出我想要的东西,但经过一些试验和错误,我很困惑我如何用python变量捕获数据,而不是像现在一样输出到屏幕。
任何指示赞赏!
谢谢,
巴勃罗
# SOAP SERVICE
# Fetch the perl script that will request the users email.
# This service will return a name, email, and certificate.
var = "soap.pl"
pipe = subprocess.Popen(["perl", "./soap.pl", var], stdin = subprocess.PIPE)
pipe.stdin.write(var)
print "\n"
pipe.stdin.close()
答案 0 :(得分:3)
我不确定您的代码的目的是什么(特别是var
),但这是基础知识。
此
有subprocess.check_output()功能import subprocess
out = subprocess.check_output(['ls', '-l'])
print out
如果您的Python在2.7之前,则使用Popen方法使用communicate()
import subprocess
proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
out, err = proc.communicate()
print out
您可以改为迭代proc.stdout
,但似乎您希望所有输出都在一个变量中。
在这两种情况下,您都会在列表中提供程序的参数。
或者根据需要添加stdin
proc = subprocess.Popen(['perl', 'script.pl', 'arg'],\
stdin = subprocess.PIPE,\
stdout = subprocess.PIPE)
stdin = subprocess.PIPE
的目的是能够在运行时提供已启动的进程的STDIN
。然后你会做proc.stdin.write(string)
并写入被调用程序的STDIN
。该程序通常在其STDIN
上等待,并且在您发送换行符之后,它会将所有内容写入其中(自上一个换行符开始)并运行相关处理。
如果您只需要在调用时将参数/参数传递给脚本,那么通常不需要也不需要涉及STDIN
。
在Python 3(自3.5起)中,推荐的方法是subprocess.run()