使用中文件的输入子流程调用不工作,而操作系统做

2024-10-04 11:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个非常古老的FORTRAN程序创建一个python3包装器。基本上,我需要运行程序,并直接从一个文件输入到程序这样(从命令行)。你知道吗

programname < input.txt

这是毫无疑问的。当我试着用python做的时候操作系统工作但是子流程调用没有。当我使用子流程调用我陷入困境,程序只是坐在那里等待输入,即使它应该已经有了它。你知道吗

为什么不用呢操作系统?我需要一个执行期限。有时候FORTRAN代码在内部被卡住了,只能坐在那里。如果5秒钟内还没完成,我就要杀了它。据我所知操作系统不能强制执行限制,但子流程调用可以,所以这就是我要追求的。你知道吗

我用一个python程序作为FORTRAN程序的代理来重新创建它。这是代码(Python输入.py)地址:

some_input = input("Enter some input: ") 
print(some_input)

然后用任何东西创建一个输入文件,这就是我使用的(输入文件)你知道吗

RealName

在命令行中,这可以正常工作:

python pythonInput.py < input.txt

退货:

[khoopes@computer ~]$ python pythonInput.py < input.txt
Enter some input: RealName
[khoopes@computer ~]$

但是当我编写另一个使用python调用另一个python程序的脚本时,它子流程调用不起作用,这是代码(pythonRunTester.py文件)地址:

import subprocess
import os
os.system('python pythonInput.py < input.txt')
subprocess.call(['python', 'pythonInput.py', '<', 'input.txt'])

退货:

[khoopes@computer ~]$ python pythonRunTester.py
Enter some input: RealName
Enter some input:

那个操作系统工作,但子流程调用没有,它只是挂在那里等待。我试过让它使用shell=True标志,如下所示:

import subprocess
import os
os.system('python pythonInput.py < input.txt')
subprocess.call(['python', 'pythonInput.py', '<', 'input.txt'], shell=True)

它回来了

[khoopes@computer ~]$ python pythonRunTester.py
Enter some input: RealName
Python 3.6.8 (default, Aug  7 2019, 17:28:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

但这也不管用。你知道吗

你知道我怎么用它来工作吗子流程调用或者,我可以用其他方法强制执行时间操作系统?你知道吗

谢谢你


Tags: 文件pyimport程序txtinputossome
2条回答

除了@LinPy answer,您还可以将stdin作为参数传递给call()

x = subprocess.call(['python', 'pythonInput.py'], stdin=open("/tmp/test.txt"))

您需要编写不带列表的整个命令:

subprocess.call('python pythonInput.py < input.txt', shell=True)

这会有用的

相关问题 更多 >