Popen没有接受这些论点

时间:2013-06-07 04:54:09

标签: python shell wxpython

大家好我正在学习python和shell脚本,对于GUI我正在使用wxpython。

我已经说过制作一个自动化的工具来做一些操作,deb创建也是其中之一。

对于deb创建,命令是:

              ./myfile -u username

我已经尝试过os.Popen,os.system,subprocess.Popen,subprocess.call.But没有用,每次“-u”都不会生效,“ - u”是必须的。我试过在变量中存储“-u”并传递它但仍然没用。

请建议我确切的方式或我做错的地方

没有错误消息,但“myfile”输出显示“-u”未在命令中给出。

代码是:

   1. cmd = ['./myfile', '-u', 'username']
      Popen(cmd,shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)

   2. user = "-u" 
      name = "username"
      sbprocess.call("./myfile %s %s" %(str(user),str(name)), shell=True)

同样使用“os”命令

2 个答案:

答案 0 :(得分:1)

您问题中的第一个代码示例传递了错误的命令,因为shell=True更改了第一个参数的含义,来自the subprocess docs

  

在具有shell=True的Unix上,shell默认为/bin/sh。如果args是   string,string指定通过shell执行的命令。   .. [剪断] ..

     

如果 args是   sequence ,第一项指定命令字符串, any   其他项目将被视为shell的附加参数   本身。也就是说,Popen相当于:

Popen(['/bin/sh', '-c', args[0], args[1], ...])

如果以下命令在shell中起作用,则问题的第二个代码示例应该有效:

$ /bin/sh -c './myfile -u username'

要修复您的命令,您可以省略可能不必要的shell=True并使用check_call()

import subprocess

subprocess.check_call(["./myfile", "-u", "username"])

答案 1 :(得分:0)

尝试'bash'而不是'./'。如果它的bash脚本或者使用各自的。仅当你的myfile是shell脚本时才能工作。

subprocess.call("bash myfile -u %s" % str(name)), shell=True)