试图通过python子进程按顺序外壳出命令



我正在尝试运行virtualenv并通过pip在本地安装包。当运行下面的例程时,没有给出任何输出来指示它失败的原因。我正在尝试做一些类似于以下的事情

source env/bin/activate

(env) pip install [packages]

我可以用Popen("source env/bin/activate && pip install package", shell=True)来做,但希望以我在日常生活中定义的方式来处理它。

有什么想法吗?

def install_pkgs(self):
    proc = subprocess.Popen(["source %s" % (os.path.join(self._commons['dst_dir'], 'env/bin/activate'),)],
                            stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE,
                            shell=True,
                            executable='/bin/bash')
    proc.stdin.write(str.encode("pip install --upgrade %sn" % (" ".join(self._loaded_packages),)))
    output, error = proc.communicate()
    print(output)
    print(error)

要获取stderr,您应该指定stderr=subprocess.PIPEstderr=subprocess.STDOUT(将其重定向到stdout)。

要安装/升级软件包,您可以尝试:

subprocess.check_call(['/path/to/virtualenv/bin/pip', 'install', '-U'] + packages)

最新更新