使用python' sh模块时, 我想运行一个'来源'内置命令。
但是我无法运行它,因为sh应该有一个二进制作为参数。
如何使用sh模块运行内置命令?
# source ./test.sh
sh.source('./test.sh') # wrong usage
sh.Command('source') # wrong usage
答案 0 :(得分:4)
通过Python In [69]: uniques, indices = np.unique(df.index, return_index=True)
In [70]: indices
Out[70]: array([0, 3, 6, 7])
模块调用sh -c "source hello"
:
sh
也就是说,考虑使用sh.sh('-c', 'source test.sh')
代替,其中包含的魔法少得多,因此表现得更具可预测性:
subprocess.Popen()
当数组传递给# ...if hardcoding the script to source in your Python code
subprocess.Popen('source ./test.sh', shell=True)
# ...otherwise:
subprocess.Popen(['source "$@"', './test.sh'], shell=True)
的第一个参数时,第一个参数被视为要运行的源,后续参数在运行期间变为subprocess.Popen
,$1
等。该脚本允许通过$2
调用一个字符串文字数组与/bin/sh
的组合。
但是:将内容导入shell的目的和目的通常是修改该shell的状态。使用shell=True
或sh.sh
,shell只持续那个单独的Python函数调用调用,所以没有状态持续到未来的subprocess.Popen()
或sh
调用,这使得任何这些用法都不可能真正实现你手头的目标
你真正想要的东西可能更像是这样:
subprocess
... sh.sh('-c', 'source ./test.sh; do-something-else-here')
取决于do-something-else-here
对shell及其环境所做的更改。