【发布时间】:2018-01-02 23:01:43
【问题描述】:
为什么我的 python 解释器中的 os.system('command') 的输出与终端中的命令不同?
问题解释得很快:
我有
echo $CONFPATH
/home/claramart/Datamart/Parameter
但是
os.system('echo $CONFPATH')
0
这是为什么呢?
详情: 我想获得我的环境 $CONFPATH。我正在使用 python3.5 和 ubuntu16.04.2。
我可以从命令行执行此操作:
echo $CONFPATH
/home/claramart/Datamart/Parameter
这就是我想要的答案。
从命令行将其作为 python 命令执行也可以:
python3 -c 'import os; print(os.environ["CONFPATH"])'
/home/claramart/Datamart/Parameter
问题是,我想从我的 python 解释器而不是从命令行执行它。 从我的 python 解释器执行它不起作用(我使用的是 Pyzo4.4.1):
print(os.environ["CONFPATH"])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python3.5/os.py", line 725, in __getitem__
raise KeyError(key) from None
KeyError: 'CONFPATH'
我想这完全来自我的解释器,而不是 python 本身,因为从命令行执行 python 是有效的。此外,我可以从我的 python 解释器中获取 $PYTHONPATH,所以我猜它根本没有检测到所有环境变量。
为了避免这种情况并从命令行执行它,我想从我的 python 解释器执行命令行,但是我的 2 个命令行执行都没有按照我想要的方式工作:
os.system('echo $CONFPATH')
0
和:
os.system("""python3 -c 'import os; print(os.environ["CONFPATH"]'""")
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.5/os.py", line 725, in __getitem__
raise KeyError(key) from None
KeyError: 'CONFPATH'
256
在这两种情况下,它确实适用于 $PYTHONPATH,所以我想它必须在某个时候通过我的解释器,因为我的问题是特定于该变量 $CONFPATH。
为什么我的 python 解释器中的 os.system('command') 与终端中的命令输出不同?
【问题讨论】:
-
在您的默认 shell 中运行命令,然后您将获得环境。所以:
os.system("""/usr/bin/bash -c python3 -c 'import os; print(os.environ["CONFPATH"]'""")- 可能没有正确引用或得到正确的 bash 路径,但希望你明白这一点 -
我明白了,但是我以前没有使用过这个,
os.system("""/bin/bash -c python3 -c 'import os; print(os.environ["CONFPATH"]'""")启动了一个似乎没有结束的进程,就像它被卡住了一样。也许我做错了? -
“从我的 python 解释器执行它不起作用(我使用的是 Pyzo4.4.1)”我认为 Pyzo 解释器在具有不同环境变量的不同环境中运行。它在标准解释器中工作吗?
-
@Goyo 它在标准的 python3.5 解释器中也不起作用
标签: python python-3.x command-line os.system pyzo