请教: Python 获取 shell 自定义变量的值。

2020-03-31 17:19:48 +08:00
 vhwwls

比如在当前 shell 进程中,创建一个自定义变量

test=123

这个时候如果在 shell 中执行

set | grep -i test

输出结果中,可以看见 test 这个变量是存在的。

我在当前 shell 中定义了 test 这个自定义变量,同时,我启动了一个 Py 脚本,这个 Py 脚本有没有办法获取当前 shell 的自定义变量(比如这个$test )的值?

要求:不将自定义变量导出为环境变量。

望请各位 V 友赐教。

3466 次点击
所在节点    Python
9 条回复
aloxaf
2020-03-31 22:01:00 +08:00
你这需求也太扭曲了,为啥会有这种需求,原始问题是什么?

而扭曲的需求只有用扭曲的办法解决了:gdb attach 上去找(
aloxaf
2020-03-31 22:26:15 +08:00
给出一个扭曲的实现: https://i.loli.net/2020/03/31/tVYNr6kWEiTfB18.png

```
#!/usr/bin/env python3
from pygdbmi.gdbcontroller import GdbController
import os

gdbmi = GdbController()
gdbmi.write(f"attach {os.getppid()}")
res = gdbmi.write('p (char *)get_string_value("foo")')

for mes in res:
if "$1" in str(mes.get("payload", "")):
print(mes["payload"])
```
xpresslink
2020-03-31 23:26:28 +08:00
一个变量创建时,它不会自动地为在它之后创建的 shell 进程所知。而命令 export 可以向后面的 shell 传递变量的值。当一个 shell 脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export 命令可以用于传递一个或多个变量的值到任何后继脚本。 ----《 UNIX 教程》
bwangel
2020-04-01 12:31:48 +08:00
ø> test=123 python3 main.py 12:30:06 (04-01)
123
5155 (lazywork) /private/tmp
ø> python3 main.py 12:30:09 (04-01)
None
5156 (lazywork) /private/tmp
ø> echo $test 12:30:24 (04-01)


在命令执行的时候设置一个环境变量就可以了。这样设置的环境变量只会传给目标进程。
bwangel
2020-04-01 12:32:36 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-"


import os

def main():
print(os.getenv('test'))


if __name__ == '__main__':
main()


"main(.)py" 就是一个很简单的读取环境变量的脚本
vhwwls
2020-04-01 14:11:04 +08:00
@aloxaf 原始问题是我想完全自己用 Python 实现一个和 bash 内置的 echo 命令一模一样的小工具,其实就是想锻炼一下自己的 Python 能力,因为最近在自学,谢谢兄台,受教了。
aloxaf
2020-04-01 14:56:40 +08:00
@vhwwls bash 中,变量展开的操作是由 shell 完成的……你直接输出自己的参数就可以了
ps1aniuge
2020-04-01 16:17:03 +08:00
?啥玩意?说的不清不楚?想在 shell 中给 py 传值?
shell 传的是字符串,powershell 传的是.net 强类型变量。
powershell 可以通过管道传递强类型对象,
可以远程传递强类型对象。

powershell:
$a = 1
$b = python xxx.py $a
cominghome
2020-04-07 18:56:00 +08:00
export $test=123 && python xx.py

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658012

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX