大家好我正在学习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”命令
答案 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)