【发布时间】:2018-06-09 03:56:36
【问题描述】:
我正在尝试创建一个在 Mac 终端上运行 perl 脚本的 python 脚本。流行的 3D 打印机切片引擎 Slic3r 具有使用命令行的能力,它是用 Perl 编写的。我想编写一个 python 脚本来自动化一些过程,这是我最了解的语言。如果我直接在终端中输入我想使用的命令,它会正常工作,但是,如果我尝试使用 python 的subprocess,它适用于某些命令,但不适用于其他命令。
例如,如果我使用我的脚本使用docs 中概述的语法来获取 Slic3r 版本,它可以正常工作。该脚本有效:
import os
import subprocess
os.system("cd Slic3r")
perl = "perl"
perl_script = "/Users/path/to/Slic3r/slic3r.pl"
params = "--version"
pl_script = subprocess.Popen([perl, perl_script, params], stdout=sys.stdout)
pl_script.communicate()
print 'done'
这会返回:
1.3.0-dev
done
如果我使用我得到的相同脚本使用诸如 --info 之类的命令(有关更多信息,请参阅修复模型下的 Slic3r 文档):
在:
import os
import subprocess
os.system("cd Slic3r")
perl = "perl"
perl_script = "/Users/path/to/Slic3r/slic3r.pl"
params = "--info /Users/path/to/Desktop/STL_Files/GEAR.stl"
pl_script = subprocess.Popen([perl, perl_script, params], stdout=sys.stdout)
pl_script.communicate()
print 'done'
输出:
Unknown option: info /Users/path/to/Desktop/STL_Files/GEAR.stl
Slic3r 1.3.0-dev is a STL-to-GCODE translator for RepRap 3D printers
written by Alessandro Ranellucci <aar@cpan.org> - http://slic3r.org/
Usage: slic3r.pl [ OPTIONS ] [ file.stl ] [ file2.stl ] ...
根据我的研究,我怀疑将字符串的空格用作参数存在一些问题。在尝试这个项目之前,我从未使用过subprocess,因此可能会出现简单的语法错误。
我知道 Slic3r 语法是正确的,因为如果我直接在终端中输入它,它就可以完美运行。谁能看到我做错了什么?
【问题讨论】:
-
您正在执行相当于 shell 命令
'perl' 'slic3r.pl' '--info GEAR.stl'而不是'perl' 'slic3r.pl' '--info' 'GEAR.stl'
标签: python macos subprocess popen