【问题标题】:problem with python scriptpython脚本的问题
【发布时间】:2010-06-09 13:55:10
【问题描述】:

我想从 python 脚本运行一个 csh 文件,

例子,

#!/usr/bin/python
import os

os.system("source path/to/file.csh")

我希望这个文件在我运行 python 脚本时在同一个 shell 中运行,因为file.csh 脚本设置了一些我需要的环境变量。

有人知道如何在 Python 中做到这一点吗?

【问题讨论】:

  • 我想用 source 命令运行 file.csh 但它不正确,os.system("source path/to/file.csh")
  • 看看subprocess 模块

标签: python subprocess


【解决方案1】:

子进程不能影响父进程的环境。最好的办法是在单独的进程中运行 csh 脚本,获取它定义的环境变量,然后在 python 脚本中设置每个环境变量。

即使这样,python 脚本也无法影响运行 python 脚本的 shell。

解决此问题的常用方法 (AFAIK) 是让您的脚本发出 shell 命令来设置环境,然后从主 shell 运行脚本并评估您返回的内容。

有关更多信息,您可能需要查看此问题:can a shell script set environment variables of the calling shell

【讨论】:

    【解决方案2】:

    你可以这样拼凑:

    #!/usr/bin/env python
    # This is kludge.py
    
    print "setenv VARNAME \"the value\""
    

    在您的情况下,您可以让 file.sh 打印 setenv 行。

    然后从 csh:

    $ eval `./kludge.py`
    $ echo $VARNAME 
    the value
    

    这并不干净,但它是让子进程影响其父进程环境的唯一方法。这只是因为父进程明确地让它发生在eval

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2014-02-15
      • 2017-03-16
      • 2016-05-10
      相关资源
      最近更新 更多