Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从主函数返回字符串?_Python_Subprocess - Fatal编程技术网

Python 如何从主函数返回字符串?

Python 如何从主函数返回字符串?,python,subprocess,Python,Subprocess,如何在此脚本中获取字符串作为返回 main.py from subprocess import Popen, PIPE import os import sys child = os.path.join(os.path.dirname(__file__), "child.py") command = [sys.executable, child, "test"] process = Popen(command, stdout=PIPE, stdin=PI

如何在此脚本中获取字符串作为返回

main.py

from subprocess import Popen, PIPE
import os
import sys

child = os.path.join(os.path.dirname(__file__), "child.py")
command = [sys.executable, child, "test"]
process = Popen(command, stdout=PIPE, stdin=PIPE)
process.communicate()
print(process.poll())
child.py

import sys

def main(i):
    return i*3

if __name__ == '__main__':
    main(*sys.argv[1:])
我只得到0。
我认为从
print()
process.communicate()
获取响应不是最好的方法。

进程不能返回与函数相同的值

他们只能设置退出代码(即您得到的0)

但是,您可以使用stdin和stdout在主脚本和
child.py
之间进行通信

要从子对象“返回”某些内容,只需打印要返回的值

# child.py
print("Hello from child")
家长会这样做:

process = Popen(command, stdout=PIPE, stdin=PIPE)
stdout, stderr = Popen.communicate()
assert stdout == "Hello from child"

Python不能向操作系统返回字符串——它只能返回整数,就像任何其他进程一样。
main
返回的字符串仅在Python中有意义。@ForceBru:但是。。。如果我实现了一个操作系统,它需要一个字符串作为返回值而不是一个数字,该怎么办?那么我不能运行python吗?@ThomasWeller我期待着使用WellerOS。@ThomasWeller如果您将其发送到
子进程.PIPE
sys.stdout
@ThomasWeller,我想您可以提供一个自定义的libc来进行链接,libc将使
exit
函数获取一个字符串并调用相应的系统调用。然后,您需要将Python与这个libc链接起来,也许可以对其内部进行一些修改,这样就很好了。然而,现在还不完全清楚该字符串存储在哪里。整数可以很容易地复制并存储在寄存器中,但字符串可能需要存储在堆中。