我有一个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
答案 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")