【问题标题】:How can I find out if os.popen is running the linux command in same shell?如何确定 os.popen 是否在同一个 shell 中运行 linux 命令?
【发布时间】:2014-10-15 12:52:44
【问题描述】:

我有以下用于运行 linux 命令的 python 函数。我正在运行一个创建一些环境变量的脚本,然后我通过使用下面的函数运行 linux 命令再次将所有这些变量移植到脚本中;但是,似乎没有使用第二个命令记录第一个命令的环境变量。我想知道是不是因为 os.popen 每次调用它时都会在不同的 shell 中运行命令?如果是这样,我该如何修改我的代码或使用哪个函数让所有东西都在同一个 shell 中运行?

def execute(cmd):
    '''Module to execute linux command'''
    try:
        proc = os.popen(cmd)
        out = proc.read().strip()
        return out
    except Exception,err:
        print "Exception occurred : %s"%str(err)
        raise(str(err))

【问题讨论】:

    标签: python linux shell environment-variables popen


    【解决方案1】:

    os.popen() 已弃用。取而代之的是subprocess.Popen(),对于您的用例,subprocess.check_output() 可能更好。这些新方法采用可选的env 参数,它是环境变量名称和值的字典。你可以在那里传递你需要的任何东西。

    或者,如果您真的想在外部设置变量并让它们“粘”在子进程中,您可以在运行 Python 之前在 shell (export myvarname) 中 export 它们。

    【讨论】:

    • 实际上我在程序中设置了许多环境变量,然后根据情况只需要返回。有什么办法可以保留外壳本身?
    • 什么是“外壳本身”? Python 是从哪里启动的?我不清楚工作流程是什么。
    • 好的。这是我的程序流程。
    • 好的。这是我的程序流程。我的 python 脚本正在调用一个实用程序(test.sh),它将 shell 环境记录到一个文件中。在调用这个实用程序之前,我找到了另一个文件,其中包含一些 shell 变量。现在,当我使用 test.sh 记录环境时,我找不到从另一个文件中获取的 shell 变量。
    • 当您说“我获取另一个文件”时,这是什么意思?你的意思是你通过启动一个 shell 从 Python 中获取了另一个文件?这永远不会奏效。我认为您最好在 Python 中简单地“解析”另一个文件,并使用我建议的 env 参数传递所需的变量。
    【解决方案2】:

    popen(3)(在 Python 中为 os.popen)从不运行 same shell,而是创建一个新的。

    【讨论】:

      猜你喜欢
      • 2017-12-22
      • 2012-02-25
      • 1970-01-01
      • 2021-05-11
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      相关资源
      最近更新 更多