相关疑难解决方法(0)

在Python中模拟Bash'source'

我有一个看起来像这样的脚本:

export foo=/tmp/foo                                          
export bar=/tmp/bar
Run Code Online (Sandbox Code Playgroud)

每次我构建时都运行'source init_env'(其中init_env是上面的脚本)来设置一些变量.

为了在Python中实现同样的目的,我运行了这个代码,

reg = re.compile('export (?P<name>\w+)(\=(?P<value>.+))*')
for line in open(file):
    m = reg.match(line)
    if m:
        name = m.group('name')
        value = ''
        if m.group('value'):
            value = m.group('value')
        os.putenv(name, value)
Run Code Online (Sandbox Code Playgroud)

但后来有人决定在init_env文件中添加如下行:

export PATH="/foo/bar:/bar/foo:$PATH"     
Run Code Online (Sandbox Code Playgroud)

显然我的Python脚本崩溃了.我可以修改Python脚本来处理这一行,但是当有人想出一个在init_env文件中使用的新功能时,它就会破坏.

问题是,是否有一种简单的方法来运行Bash命令并让它修改我的os.environ

python bash

81
推荐指数
5
解决办法
6万
查看次数

强制bash扩展从文件加载的字符串中的变量

我试图找出如何使字符串(从文件加载)中的bash(强制?)扩展变量.

我有一个名为"something.txt"的文件,内容如下:

hello $FOO world
Run Code Online (Sandbox Code Playgroud)

然后我跑了

export FOO=42
echo $(cat something.txt)
Run Code Online (Sandbox Code Playgroud)

这会返回:

   hello $FOO world
Run Code Online (Sandbox Code Playgroud)

即使变量已设置,它也没有扩展$ FOO.我无法评估或获取文件 - 因为它会尝试并执行它(它不是可执行的 - 我只是想要插入变量的字符串).

有任何想法吗?

unix linux bash shell

75
推荐指数
5
解决办法
5万
查看次数

从subprocess.Popen调用"source"命令

我有一个.sh脚本,我打电话给source the_script.sh.定期打电话很好.但是,我试图通过我的python脚本调用它subprocess.Popen.

从Popen调用它,我在以下两个场景调用中遇到以下错误:

foo = subprocess.Popen("source the_script.sh")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory


>>> foo = subprocess.Popen("source the_script.sh", shell = True)
>>> /bin/sh: source: not found
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?为什么我不能从Popen中调用"source",当我可以在python之外?

python unix popen

32
推荐指数
4
解决办法
4万
查看次数

标签 统计

bash ×2

python ×2

unix ×2

linux ×1

popen ×1

shell ×1