问题是export
不是实际的命令或文件。它是 shell 的内置命令,例如bash
and sh
,所以当你尝试subprocess.Popen
你会得到一个异常,因为它找不到export
命令。默认情况下Popen
做一个os.execvp()
产生一个新进程,这不允许您使用 shell 内部函数。
你可以做这样的事情,但你必须改变你的电话Popen
.
http://docs.python.org/library/subprocess.html http://docs.python.org/library/subprocess.html
您可以指定shell=True
使其使用 shell 命令。
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
在 Unix 上,shell=True:如果 args 是字符串,则它指定要通过 shell 执行的命令字符串。这意味着字符串的格式必须与在 shell 提示符下键入时完全相同。例如,这包括引用或反斜杠转义其中包含空格的文件名。如果 args 是一个序列,则第一项指定命令字符串,任何其他项将被视为 shell 本身的附加参数。也就是说,Popen 所做的相当于:
Popen(['/bin/sh', '-c', args[0], args[1], ...])