【问题标题】:How to run a source from python? [duplicate]如何从 python 运行源代码? [复制]
【发布时间】:2019-07-02 12:38:48
【问题描述】:

我正在尝试运行 activate.sh 文件以从 python 设置虚拟环境的环境路径,但我无法从 python 运行源文件。有什么办法吗

我的来源在这里

if sys.argv[1]=='-a':
        os.system('. activate.sh')
    elif sys.argv[1]=='-d':
        os.system('. deactivate.sh')
    else:
        print('You only have -a, -d as options')

【问题讨论】:

标签: python shell terminal


【解决方案1】:

您可以使用子进程,它将运行 bash 脚本。但要小心,只使用受信任的 bash 文件。所以代码应该是:

import subprocess
if sys.argv[1]=='-a':
        subprocess.call("activate.sh", shell=True)
    elif sys.argv[1]=='-d':
        subprocess.call("deactivate.sh", shell=True)
    else:
        print('You only have -a, -d as options')

【讨论】:

  • 激活和停用脚本位于我不想手动设置路径的同一文件夹中。另外通过设置路径,我得到了 Permission Denied
  • 这应该使用脚本所在的同一目录
  • 权限被拒绝是我得到的全部/bin/sh: 1: ./activate.sh: Permission denied
  • 使用 chmod 将 bash 文件权限设置为 777,这样任何人(包括 python)都可以读取、写入和执行它。
  • 即使我使这个可执行文件虚拟环境在后台运行并关闭
【解决方案2】:

这将在新的 bash 会话中激活 virtualenv

假设platform: linuxnew bash sessionOK

import os
# os.execv("/bin/bash", ["bash", "-c", "source ve/bin/activate;bash"])
os.execv("/bin/bash", ["bash", "-c", "source /path/to/activate;bash"])

【讨论】:

  • 我试过了,但是虚拟环境终端在后台运行并停止
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2013-07-25
相关资源
最近更新 更多