gpt4 book ai didi

Python subprocess.call 一个 bash 别名

转载 作者:IT老高 更新时间:2023-10-28 20:56:12 28 4
gpt4 key购买 nike

在工作中有一个列出已完成任务的脚本。这是由其他人编写的,并通过网络托管。我的 .bashrc 中有一个别名,它调用这个脚本,它有很多标志等,我想编写一个 python 脚本,每隔几分钟调用一次这个别名,这样我就可以打开一个带有更新统计信息的 shell。但是,subprocess.call("myAlias") 失败。我对 python 还是很陌生,并且正在努力解决这个问题。

from subprocess import call

def callAlias():
call("myAlias")

callAlias()

我也计划添加更多,但我在第一步中遇到了障碍。 :P

我会发布更多信息,但我必须小心处理很多敏感的 secret 内容。抱歉,代码含糊不清,缺少错误输出。

最佳答案

更新:感谢大家对这个 hack 解决问题的支持,我很高兴它很有用。但是一个更好的答案是三人组的,在页面的下方徘徊......

如果您需要的别名是在 ~/.bashrc 中定义的,那么由于以下几个原因它不会运行:

1) 你必须给'shell'关键字arg:

subprocess.call('command', shell=True)

否则,您给定的命令将用于查找可执行文件,而不是传递给 shell,它是扩展别名和函数等内容的 shell。

2) 默认情况下,subprocess.call 和 friend 使用'/bin/sh' shell。如果这是您要调用的 Bash 别名,则需要使用“可执行”关键字 arg 告诉子进程使用 bash 而不是 sh:

subprocess.call('command', shell=True, executable='/bin/bash')

3) 但是,/bin/bash 不会获取 ~/.bashrc,除非作为“交互式”shell(使用“-i”)启动。不幸的是,您不能传递 executable='/bin/bash -i ',因为它认为整个值是可执行文件的名称。因此,如果您的别名是在用户的正常交互式启动中定义的,例如在 .bashrc 中,那么您必须使用这种替代形式调用命令:

subprocess.call(['/bin/bash', '-i', '-c', command])
# i.e. shell=False (the default)

关于Python subprocess.call 一个 bash 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060863/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com