subprocess.call()或子流程.Popen用于生成/使用输出文件

2024-10-04 11:35:29 发布

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

我试图编写一个Python代码来与另一个使用命令行提示的软件交互。执行命令行提示符后,目录中会生成多个输出文件,软件使用这些输出文件进行一些计算。另外,我的程序的其余部分使用这些输出文件。目前,我运行python代码,然后在命令行提示符中手动输入,然后调用其余代码,这一切都很好,但是当我尝试将:

subprocess.call(['sfit4Layer0.py', '-bv5', '-fs'], shell=False)

在我的文件中,它不能正确执行(输出文件不会生成)。在

当我编写上述代码时,它是自己的独立python代码,并在代码的第一部分之后立即调用它——它也起作用了。在

根据我的输出,我确信问题在于:调用生成了多个文件,然后使用这些文件进行计算,但是,它没有生成正确的文件,因此我的输出中出现错误。所以在某种程度上,它似乎有点超前:在进行计算之前,不必等待输出文件被生成,但是,当我在程序之外单独运行这个命令时,它是有效的。你知道为什么会这样吗?在

我做错什么了?我需要指定目录吗(输出文件可以放在我的计算机的其他地方吗)?我需要使用吗子流程.Popen? 我在互联网上搜索过,但我对Python还是个新手,完全被难住了。在

欢迎提出任何建议。谢谢!在

编辑:对于那些询问者,以下是sfit4Layer0.py代码:

^{pr2}$

Tags: 文件代码命令行py程序目录软件手动
3条回答
subprocess.call(['sfit4Layer0.py', '-bv5', '-fs'], shell=False)
  1. 假设sfit4Layer0.py是可执行的,但它可能不是
  2. 假设sfit4Layer0.py包含#!/usr/bin/python shebang,这可能不是。在

如果脚本包含shebang并且不可执行 尝试:

^{pr2}$

如果脚本是可执行的并且包含shebang 尝试:

subprocess.call(['/path/to/script/sfit4Layer0.py -bv5 -fs'], shell=True)

试试看:subprocess.call('sfit4Layer0.py -bv5 -fs', shell=True)

如果试图从python脚本调用另一个python脚本subprocess.call()方法适合您的操作。在

我建议你转过去

subprocess.call(['sfit4Layer0.py', '-bv5', '-fs'], shell=True)

希望这个解决方案有效。在

Popen通常用于将STDIN/STDOUT或STDERR从一个进程传递到另一个进程时。在

另外,当您编写文件时,请确保您将文件或目录路径创建为绝对路径,这将有助于您始终将文件放置在所需的位置。在

快乐的编码。在

相关问题 更多 >