python - 如何在命令中运行带有空格的可执行文件?
问题描述
我正在尝试使用以下命令执行以下命令Popen(shlex.split(cmd)...
,Popen(cmd.split(' ')...
但遇到以下错误,我还能如何运行此命令或如何调试此错误?
def function_create_cmds(cmd):
print cmd
#proc = Popen(shlex.split(cmd), shell=True, stdout=PIPE, stderr=PIPE)
proc = Popen(cmd.split(' '), stdout=PIPE, stderr=PIPE)
(output, error) = proc.communicate()
return output,error
cmd = "/usr/local/bin/xbs submitproject -notesfile /Users/usernamea/autosubmissionlogs/07162018_133945/milestone/project-375/project-375.plist -version project-1.0.7 /Users/usernamea/wifiroots/project Release"
(output,error) = function_create_cmds(cmd)
print output
print error
错误:
Popen(cmd.split(' '),
INFO: submitproject was unable to locate a submission directory named
Popen(shlex.split(cmd)
xbs requires a command
解决方案
不要使用shell=True
它不必要地调用一个 shell 来运行你的子进程,因此调用两个进程没有任何好处。
proc = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
应该管用。如果没有,请提供您在这种情况下遇到的错误。
您总是可以自己拆分命令:
subprocess.Popen([
"/usr/local/bin/xbs",
'submitproject',
'-notesfile',
'/Users/usernamea/autosubmissionlogs/07162018_133945/milestone/project-375/project-375.plist',
'-version',
'project-1.0.7',
'/Users/usernamea/wifiroots/project',
'Release',
])
推荐阅读
- symfony - Doctrine 不会更新/生成 ManyToOne 和 OneToMany 的字段
- crystal-reports - 日期、时间或日期时间条件字段的组选项必须是日期组
- python - 使用 shapefile 库将 Geojson 转换为 shapefile
- sql-server - 使用 SSMS 2017 在 SQL Server 2016 上部署 SSIS 包
- algorithm - 最坏情况最小排序时间复杂度定理
- angular6 - 当组件在 Angular 应用程序内部使用并作为 Angular 之外的自定义元素时出现 Angular 元素错误
- javascript - 如何从 args 中提取数据和文件名以上传文件?
- java - Java 中的多线程与 Task 仅在 onClick Button 时工作一次
- jenkins - 为动态创建的 gitlab 存储库部署 jenkins 作业
- javascript - JS中只接收一个参数