如何从外部程序获取输出并将其放入Python中的变量中

时间:2017-06-09 15:30:33

标签: python subprocess

我仍然是蟒蛇世界的新手,并且知道这应该是一个容易回答的问题。我在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()

1 个答案:

答案 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()