python - 当程序写入菜单/打印日志时,使用 python 在父 shell 中创建 bash 别名

标签 python bash python-2.7 ubuntu

用户输入“sudo python helper.py”来运行我的文件。我希望程序创建一个别名,以便用户只需键入“helper”。因此,当 python 脚本运行时,我让它创建一个别名(在检查别名是否已存在之后)。

lStr= 'alias helper=\'sudo python "'+os.path.abspath(__file__)+'"\''
print lStr
subprocess.Popen(lStr,shell=True)

但是当程序退出时,别名仍然不存在,我不知道为什么。如果我手动将 print 语句的结果复制到 bash 中,那么别名就会正确创建。但是,当从 python 程序中调用它时,它不起作用。有什么想法吗?

<小时/>

因为我的程序有大量的交互,所以我无法使用 Use python to dynamically create bash aliases 给出的答案(eval "$(python ...)"),因为这将捕获菜单文本和用户交互中涉及的其他内容。

我可以(并且确实)更新 ~/.bash_aliases,这样用户在下次打开 shell 时就已经获得了新的别名——但是有没有办法即使在程序与用户交互?

最佳答案

当您使用子进程时,您就是在这样做,打开另一个进程来运行目标命令。

问题在于您正在创建一个新的 shell 环境,设置别名,然后立即退出新的 shell,从而丢失配置。

您可以做的是让 Python 进程简单地打印要评估的命令,然后使用 eval 将它们加载到您当前的环境中。

Python:

lStr= 'alias helper=\'sudo python "'+os.path.abspath(__file__)+'"\''
print lStr

Bash,评估输出,并在当前上下文中运行别名命令。

eval "$( python ./myScript )"

然后

alias helper
alias helper='sudo python "/Users/xyz/test.py"'

关于python - 当程序写入菜单/打印日志时,使用 python 在父 shell 中创建 bash 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902607/

相关文章:

python - "save() got an unexpected keyword argument ' 在功能 View 中提交 '"错误

python - 如何使用字典查找替换列表中的元素

python - 根据 pandas 中的日期时间查找最近值

linux - 让用户验证密码

bash - 如何避免发送导致 "Extra line breaks in this message were removed"的电子邮件

python-2.7 - 如果用户关键字在 Robot Framework 2.8.5 中包含持续失败,则不会返回任何值

python - 如何在Python中发送带有路径参数的GET请求

bash - wc 输出在 vim 内部/外部不同

python-2.7 - 井字游戏程序(Python)中的错误

python - 如何从 python(django) 中的字符串中分离数字?