【发布时间】:2020-11-22 09:23:50
【问题描述】:
编辑:结果表明子进程模块没有分配给 PATH 变量的目录与我系统的 shell 相同的目录。因此,解决方案是简单地使用完整路径(通过which maxima 找到)调用Maxima,或者在subprocess.run() 参数中更改env={'PATH':maxima_paths}。正如@RobertDodier 指出的那样,这不是 Maxima 的具体问题。
我有一个名为 testMaxima.txt 的文件,其中包含以下 Maxima 代码:
write_data([[1,2,3]], "test.txt");
此 Maxima 代码在工作目录中创建文件 test.txt。
我希望使用 Python 脚本运行此文件。我不想手动打开 Maxima(数学引擎)来执行此操作。
我尝试过的:我知道我可以在命令行/终端中使用maxima -b testMaxima.txt 运行此文件,并且我尝试使用python 模块subprocess 使用以下python 代码模拟此代码:
import subprocess
subprocess.run("maxima -b testMaxima.txt", shell=True)
但这并没有像它应该的那样创建新的test.txt 文件。如果这有帮助,当我运行时
>>> subprocess.call("maxima -b testMaxima.txt", shell=True)
127
我得到 127 的输出。据我了解,这意味着终端找不到给定的命令。但是,当我直接通过终端执行代码maxima -b testMaxima.txt 时没有问题,所以我不确定为什么它找不到给定的命令。有人对我应该尝试什么有任何想法吗?
提前谢谢你!
编辑:根据@mkrieger 的建议,我使用的是字符串"maxima -b testMaxima.txt" 而不是序列["maxima", "-b", "testMaxima.txt"]。不幸的是,这并没有什么不同。
【问题讨论】:
-
如果您将命令作为列表传递给
subprocess.run,那么您需要使用shell=False(这是首选)。如果由于某种原因必须使用shell=True,则需要将命令作为单个字符串传递。 -
这能回答你的问题吗? subprocess.call using string vs using list
-
@mkrieger1 不幸的是,使用字符串不会改变结果——它仍然不会产生所需的输出。
-
@mkrieger1 另外,设置
shell=False并没有什么不同。不过谢谢你的想法! -
嗯,它对我有用,如图所示。我在 Linux 上工作。几个想法。 (1)也许它有助于放置最大值可执行文件的完整路径?
/usr/local/bin/maxima或其他。我猜which maxima会说。 (2) 可以通过subprocess或os.system执行其他程序吗?也许问题不在于 Maxima。希望这会有所帮助。
标签: python python-3.x terminal subprocess maxima