首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >subprocess.call

subprocess.call
EN

Stack Overflow用户
提问于 2013-01-18 03:39:11
回答 3查看 12.8K关注 0票数 2

我是subprocess.call函数的新手,我尝试过相同调用的不同组合,但它不起作用。

我正在尝试执行以下命令:

代码语言:javascript
复制
cmd = 'sort -k1,1 -k4,4n -k5,5n '+outpath+fnametempout+' > '+outpath+fnameout
print cmd

如果我尝试调用,我得到一个错误:

代码语言:javascript
复制
cmd = cmd.split(" ")
print cmd
subprocess.call(cmd)

我得到的错误是:

代码语言:javascript
复制
sort: stat failed: >: No such file or directory
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-18 03:41:29

通过这种方式,您需要shell=True来允许外壳重定向工作。

代码语言:javascript
复制
subprocess.call('sort -k1,1 -k4,4n -k5,5n '+outpath+fnametempout,shell=True)

更好的方法是:

代码语言:javascript
复制
with open(outpath+fnameout,'w') as fout: #context manager is OK since `call` blocks :)
    subprocess.call(cmd,stdout=fout)

这避免了在一起生成shell,并且不会受到shell注入类型的攻击。在这里,cmd是一个与原始列表相同的列表,例如

代码语言:javascript
复制
cmd = 'sort -k1,1 -k4,4n -k5,5n '+outpath+fnametempout
cmd = cmd.split()

还应该说明的是,python有非常好的排序功能,所以我怀疑是否真的有必要通过一个子进程将工作传递给sort

最后,与使用str.split从字符串中分离参数相比,使用shlex.split可能更好,因为它可以正确地处理带引号的字符串。

代码语言:javascript
复制
>>> import shlex
>>> cmd = "foo -b -c 'arg in quotes'"
>>> print cmd.split()
['foo', '-b', '-c', "'arg", 'in', "quotes'"]
>>> print shlex.split(cmd)
['foo', '-b', '-c', 'arg in quotes']
票数 12
EN

Stack Overflow用户

发布于 2015-10-03 23:06:23

在python中执行上面的命令是不可取的:

代码语言:javascript
复制
import subprocess
import sys
proc = subprocess.Popen(['sort','-k1','1', '-k4','4n', '-k5','5n',    '+outpath+fnametempout+', '>', '+outpath+fnameout'],stdin=subprocess.PIPE)
proc.communicate()
票数 2
EN

Stack Overflow用户

发布于 2015-02-25 12:15:12

示例:

代码语言:javascript
复制
subprocess.call(['ps','aux'])
lines=subprocess.check_output(['ls','-al'])
line_list = lines.split('\n')

or

handle = subprocess.Popen('ls',stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True)
handle.stdout.read()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14386775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档