0

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

我已经说过要制作一个可以执行某些操作的自动化工具,deb 创建也是其中之一。

对于 deb 创建,命令是:

              ./myfile -u username

我试过 os.Popen, os.system, subprocess.Popen, subprocess.call。但是每次“-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”命令

4

2 回答 2

1

您问题中的第一个代码示例传递了不正确的命令,因为文档shell=True中更改了第一个参数的含义:subprocess

在带有 的 Unix 上shell=True,shell 默认为/bin/sh. 如果 args 是字符串,则该字符串指定要通过 shell 执行的命令。..[剪辑]..

如果args 是一个序列,则第一项指定命令字符串,任何附加项都将被视为 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"])
于 2013-06-08T07:36:35.667 回答
0

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

subprocess.call("bash myfile -u %s" % str(name)), shell=True)
于 2013-06-26T09:53:28.023 回答