【问题标题】:Can I run a shell command from python script in the current shell我可以在当前 shell 中从 python 脚本运行 shell 命令吗
【发布时间】:2019-03-16 13:57:26
【问题描述】:

我有一个 python 脚本,它调用两个不同的 shell 脚本。第一个脚本设置了第二个脚本所需的一些环境变量。 python代码结构如下:

import subprocess
subprocess.call(["bash", "a.sh"]) #a.sh sets env_var1
subprocess.call(["bash", "b.sh"]) #b.sh reads env_var1

因为脚本a.shb.sh 在不同的shell 中运行,所以上面的代码没有必要。 我想知道我们可以在当前 shell 本身中从 python 执行这些 shell 脚本

【问题讨论】:

标签: python shell


【解决方案1】:

您可以使用此行在 python os.system('command to run here') 中向您的 shell 运行命令

在你的情况下,它会是这样的:

import os

os.system('./a.sh')
os.system('./b.sh')

【讨论】:

  • 但是如何在一个os.system中运行两个脚本@
  • os.system 不会离开当前的 shell,因此一个接一个地运行将确保在第一个脚本中创建环境变量并在第二个脚本中访问
  • 是的,在 python 中它可以工作。以下是我的 python 脚本path1 = r'd1/xyz.csh' path2 = r'd2/abc.csh' os.system("cat d1/xyz.csh") os.system(path1) os.system("echo $Env_var_1 sys1") os.system(path2)。而xyz.cshEnv_var_1="var one by xyz" Env_var_2="var two by xyz" echo $Env_var_1。而abc.cshecho $Env_var_2, "in abc"
  • 创建变量时使用导出
  • 问题是os.system 实际上确实产生了一个子进程,子shell 在其中运行。每次调用os.system 都会这样做,这意味着您每次都会获得一个“新鲜”的进程/子shell。只需尝试os.system("export MYVAR=someval; echo $MYVAR") 然后os.system("echo $MYVAR"),或者只是连续调用os.system("echo $$")
猜你喜欢
  • 2012-04-01
  • 2013-08-21
  • 2011-03-13
  • 2015-04-19
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多