我正在运行一个运行python脚本的perl脚本。
# python code = run_me.py
def main():
return 123;
if __name__ == '__main__':
main()
和Perl代码:
# perl code
my $ret = // What should I write here?
print "ret = $ret" # should print "ret = 123"
system(“run_me.py”)--〉返回退出代码(在本例中为0)
'run_me.py'--〉返回标准输出(在本例中为空字符串)
我如何在不打开套接字或文件的情况下将123返回到Perl?这可能吗?
2条答案
按热度按时间kb5ga3dv1#
Python程序的编写不符合您的要求。您希望123从Python进程传递到其他进程。但是Python的
return
不执行进程间通信。(因此池上建议使用sys.exit()
,它 * 是 * 一种进程间通信机制。)最好的解决方案是修复Python脚本:然后,其他进程(如运行Perl的进程)可以从管道读取
main
函数的输出:如果由于某种原因,你不可能修改Python程序,你仍然可以让它做你想做的事情,但这将是一个黑客,因为它必须解决原始Python程序的错误设计。在Perl中,尝试:
我更喜欢使用管道而不是
exit
,因为它更通用,更少受到模糊的限制。但如果你真的想使用exit
,同样的方法可以从Python进程中过滤123:e37o9pze2#
你的Python程序目前没有任何输出。[1]
您似乎正在尝试设定结束代码。若要设定结束代码,请使用
sys.exit
。或
1.从技术上讲,可以说它向stdout输出一个空流,向stderr输出一个空流,退出代码为零,但它绝对不会以任何方式输出123。