Python subprocess.call bash 别名

标签 python bash subprocess

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

from subprocess import call

def callAlias():
    call("myAlias")

callAlias()

我也打算添加更多内容,但我在第一步就遇到了障碍。 :P

我会发布更多内容,但有很多敏感 secret 内容我必须小心。抱歉,代码含糊,并且缺少错误输出。

最佳答案

更新:感谢您对这个解决问题的黑客的支持,我很高兴它很有用。但更好的答案是 Tripleee 的,它在页面的最下方徘徊......

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

1) 您必须给出“shell”关键字参数:

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

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

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

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

3) 但是,除非作为“交互式”shell 启动(使用“-i”),否则/bin/bash 不会获取 ~/.bashrc。不幸的是,您无法传递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/54649986/

相关文章:

python - 为 Pandas 中的不规则时间序列创建加权平均值

python - 如何在条件语句中的 for 循环迭代器上使用比较语句?

linux - 使用bash将一个文件中的行内容复制到另一个文件中的特定字符位置

linux - 命令行魔法

python - 来自外部驱动器的 Subprocess.call()

python - 如何使用 python 将代理设置/凭据传递到命令提示符,以便同一 python 代码中的后续命令可以访问互联网?

python - 当 Subprocess shell=False 时无法读取响应

python - 使用来自单独数据帧的最新数据更新一个数据帧

python - 在 Pandas 数据框中循环和更新行的最有效方法

bash - 使用 Bash 对三个最新文件进行 scp