在python脚本中调用bash函数

时间:2017-11-08 15:50:59

标签: python bash macos subprocess

我有一个python脚本(例如test.py)和一个commands.txt文件,其中包含自定义bash函数(例如my_func)及其参数,例如

my_func arg1 arv2; my_func arg3 arg4; my_func arg5 arg6;

此功能包含在~/.bash_profile中。 我试图做的是:

subprocess.call(['.', path/to/commands.txt], shell=True)

我知道这不是最好的情况,在将shell参数设置为True方面,但我似乎无法以这种方式实现它。我运行test.py时得到的是: my_func: command not found

2 个答案:

答案 0 :(得分:1)

您需要直接调用bash,并指示它处理这两个文件。

在命令行中,这是:

bash -c '. ~/.bash_profile; . commands.txt'

将它包装在python中:

subprocess.call(['bash', '-c', '. ~/.bash_profile; . commands.txt'])

你也可以在commands.txt的顶部找到〜/ .bash_profile。然后你就可以运行一个文件了。

将函数提取到单独的文件可能是有意义的,因为.bash_profile旨在由登录shell使用,而不是像这样。

答案 1 :(得分:0)

如果commands.txt文件的第一行有正确的shebang(例如#!/bin/bash),那么使文件可执行(chmod +x commands.txt)就足够了:

subprocess.call("path/to/commands.txt")