如何从python代码调用shell脚本?
当前回答
为了在python脚本中运行shell脚本,并从ubuntu中的特定路径运行它,请使用下面的方法;
import subprocess
a= subprocess.call(['./dnstest.sh'], cwd = "/home/test")
print(a)
CWD是当前工作目录
下图将不能在Ubuntu中运行;这里我们需要删除'sh'
subprocess.call(['sh' ,'./dnstest.sh'], cwd = "/home/test")
其他回答
为了在python脚本中运行shell脚本,并从ubuntu中的特定路径运行它,请使用下面的方法;
import subprocess
a= subprocess.call(['./dnstest.sh'], cwd = "/home/test")
print(a)
CWD是当前工作目录
下图将不能在Ubuntu中运行;这里我们需要删除'sh'
subprocess.call(['sh' ,'./dnstest.sh'], cwd = "/home/test")
Subprocess很好,但有些人可能更喜欢scriptine。Scriptine有更高级的方法集,如shell.call(args), path.rename(new_name)和path.move(src,dst)。Scriptine基于子流程和其他。
scriptine的两个缺点:
当前的文档水平将更加全面,即使它是足够的。 与subprocess不同,scriptine包目前默认不安装。
如果你想传递一些参数到你的shell脚本,你可以使用shlex.split()方法:
import subprocess
import shlex
subprocess.call(shlex.split('./test.sh param1 param2'))
将test.sh放在同一个文件夹中:
#!/bin/sh
echo $1
echo $2
exit 0
输出:
$ python test.py
param1
param2
如上所述,使用子流程模块。
我是这样使用的:
subprocess.call(["notepad"])
我知道这是一个老问题,但我最近偶然发现了这个问题,它最终误导了我,因为Subprocess API自python 3.5以来发生了变化。
执行外部脚本的新方法是使用run函数,它运行args所描述的命令。等待命令完成,然后返回一个CompletedProcess实例。
import subprocess
subprocess.run(['./test.sh'])
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 查看PS命令的全部输出
- 使用try和。Python中的if