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/52638511/

相关文章:

bash - 'diff' 命令可以忽略不同类型的换行符吗?

linux - 仅当两个值都分配给 bash 中的两个变量时,如何连接两个变量?

python - 在python中同时并行化不同的功能

Python - tcpdump 子进程挂起

python - 表单提交而不是 POST 是 Django 中的值

python - pandas 字符串在基于另一列的一列中出现的次数

linux - 无法从 grep 命令中排除单词

python - 使用子进程和 .Popen 自动执行 .exe 程序的简单 Windows 示例

Python 认为我的元组是一个整数

python - Varchar 字段上的 MySQL 唯一索引 - 优点和缺点?