从IronPython到Python中获取返回值
我正在尝试执行Python3.4中的IronPython脚本。 我在IronPython脚本中有一个函数,它返回一个字典,我想把这个字典放到Python3.4区域 我正在使用Subprocess.call从Python 3.4运行IronPy脚本从IronPython到Python中获取返回值,python,python-3.x,subprocess,ironpython,Python,Python 3.x,Subprocess,Ironpython,我正在尝试执行Python3.4中的IronPython脚本。 我在IronPython脚本中有一个函数,它返回一个字典,我想把这个字典放到Python3.4区域 我正在使用Subprocess.call从Python 3.4运行IronPy脚本 所以,我想知道有没有办法将外部(IronPy)程序的返回值输入到python 3.4区域。您不能直接从子进程返回对象。进程的“返回值”只是0-127之间的一个数字(传递到的数字,或者如果程序结束,则为0),这不是很有用 但是,子进程是通过管道连接的:如
所以,我想知道有没有办法将外部(IronPy)程序的返回值输入到python 3.4区域。您不能直接从子进程返回对象。进程的“返回值”只是0-127之间的一个数字(传递到的数字,或者如果程序结束,则为0),这不是很有用 但是,子进程是通过管道连接的:如果您只是使用而不是
调用运行子进程
,那么无论它写入标准输出
,您都可以读取
因此,如果您可以将数据转换为字节流并返回,那么就很容易了
- 如果dict中的数据都是简单类型(NoneType、bool、int、float、str、list、dict),则使用
对其进行编码json
- 或者,如果它们都是内置的/stdlib类型以及在CPython和IronPython之间共享的.py文件中定义的类型,则使用
对其进行编码pickle
- 或者,如果它们是可以表示为固定的类C结构的东西,则可以使用
或struct
模块ctypes
- 等等
例如:
# parent.py
import json
import subprocess
result = subprocess.check_output(['ironpython.exe', 'myironscript.py'],
universal_newlines=True)
result_dict = json.loads(result)
print(result_dict["key"])
以及:
运行此命令时,它将打印出值
(因为
json.dumps
默认转义非纯ASCII的内容,所以可以安全地将其作为文本而不是字节传递。对于大多数其他格式,您希望在子级中使用sys.stdout.write
,而不是print
,并将universal\u newlines=True
保留在父级之外。)IronPython就是Python。为什么需要调用一个单独的进程?@DanielRoseman:我想他想调用一些.NET代码,但他也想做一些特定于3.x的东西,而且因为没有3.x IronPython…说得很对。
# child.py
import json
def do_the_work():
return {'key': 'value', 'other': 'stuff'}
result = do_the_work()
print json.dumps(result)