使用python子进程运行bash命令
我在bash_配置文件中有一个命令,例如使用python子进程运行bash命令,python,python-3.x,bash,subprocess,Python,Python 3.x,Bash,Subprocess,我在bash_配置文件中有一个命令,例如id=12345,我定义了以下别名 alias obs=“echo$id”,因为随着时间的推移,该id会发生变化 现在我要做的是在python脚本中调用这个别名,以实现不同的目的。我的默认shell是bash,因此我根据web上的建议尝试了以下内容 import subprocess subprocess.call('obs', shell=True, executable='/bin/bash') subprocess.call(['/bin/bas
id=12345
,我定义了以下别名
alias obs=“echo$id”
,因为随着时间的推移,该id会发生变化
现在我要做的是在python脚本中调用这个别名,以实现不同的目的。我的默认shell是bash,因此我根据web上的建议尝试了以下内容
import subprocess
subprocess.call('obs', shell=True, executable='/bin/bash')
subprocess.call(['/bin/bash', '-i', '-c', obs])
subprocess.Popen('obs', shell=True,executable='/bin/bash')
subprocess.Popen(['/bin/bash', '-c','-i', obs])
然而,它们似乎都不起作用!我做错了什么
.bash\u配置文件
不是由Popen
和朋友读取的
不过,您的脚本可以使用环境变量(通过os.environ
)
您可以在Bash shell中使用export
将值导出为环境变量,或者使用env
:
export MY_SPECIAL_VALUE=12345
python -c "import os; print(os.environ['MY_SPECIAL_VALUE'])"
# or
env MY_SPECIAL_VALUE=12345 python -c "import os; print(os.environ['MY_SPECIAL_VALUE'])"
壳别名位于交互式壳功能中。您不能从Python访问它们。您可以只访问环境变量(
id
),或者甚至不使用env
,例如MY_SPECIAL\u VALUE=18 python…
@MarkSetchell当然可以,它在Bash中工作,但env
是可移植的。