我有成千上万的小型多行python3程序要运行,这些程序是作为字符串生成的。它们都具有相似的结构,并以print
命令结束。这是一些简单的例子
prog_1 = 'h=9\nh=h+6\nprint(h)'
prog_2 = 'h=8\nh-=2\nprint(h)'
prog_3 = 'c=7\nc=c+4\nprint(c)'
如果您要从解释器运行它们,它们应该都是可执行的。我的意思是,当你打印它们时,它们看起来像小的普通程序,
>>> print(prog_1)
h=9
h=h+6
print(h)
>>> print(prog_2)
h=8
h-=2
print(h)
>>> print(prog_3)
c=7
c=c+4
print(c)
我想从我的程序中执行它们(生成它们),并将输出(即print
的输出)捕获为变量,但是我被困住了怎么办?
像
这样的东西import os
output = os.popen("python -c " + prog_1).read()
会很棒,但我收到了这个错误?
/bin/sh: 3: Syntax error: word unexpected (expecting ")")
我认为问题是我不知道如何从命令行执行小程序?这行执行但不打印??
python -c "'h=9\nh=h+6\nprint(h)'"
非常感谢您的帮助:)
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用exec
:
>>> prog_1 = 'h=9\nh=h+6\nprint(h)'
>>> exec(prog_1)
15
答案 2 :(得分:0)
如果您希望在单独的流程中执行它们,那么您可以使用subprocess.run
:
>>> prog_1 = 'h=9\nh=h+6\nprint(h)'
>>> result = subprocess.run(["python"], input=prog_1, encoding="utf-8", stdout=subprocess.PIPE).stdout
>>> print(result)
15
请注意,encoding
支持需要Python 3.6,subprocess.run
需要Python 3.5。
在Python 3.5中,您需要将输入作为bytes
传递,并且返回的输出也将是字节。
>>> result = subprocess.run(["python"], input=bytes(prog_1, "utf-8"), stdout=subprocess.PIPE).stdout
>>> print(str(result, "utf-8"))
15