Python 如何执行纯 shell 脚本

2018-05-23 09:13:53 +08:00
 wsds

查到的一些方法如 os.system(),os.popen(),os.exec() 等,都不是执行纯 shell 脚本啊,最简单的,我想通过 python 执行 shell,进入到某个文件夹中操作,该怎么操作?os.system("cd test sudo ./start.sh")没用啊

7464 次点击
所在节点    Python
34 条回复
yyttll
2018-05-23 09:21:39 +08:00
ddrobot
2018-05-23 09:24:05 +08:00
搜索“ python 切换目录”第一个搜索结果。。。os.chdir('/Users/<username>/Desktop/')
lieh222
2018-05-23 09:25:42 +08:00
cd test; sudo ./start.sh
sudo 需要交互输入密码,你确定要用 sudo ?
ceyes
2018-05-23 09:25:52 +08:00
cd 不是系统命令啊,少年.

os.system("sudo bash -c 'cd a; ./test.sh'")
nongmei
2018-05-23 09:39:20 +08:00
subprocess 了解一下
wsds
2018-05-23 09:54:45 +08:00
@ceyes 我执行的是 shell 不是系统命令
wsds
2018-05-23 09:54:52 +08:00
@lieh222 确定
xia0chun
2018-05-23 10:04:08 +08:00
直接用绝对路径不可以吗?
walleL
2018-05-23 10:08:07 +08:00
应该是 cd test; 或者 cd test\n ?
xiaket
2018-05-23 10:10:45 +08:00
这种问题我已经不知道该建议你先多学下 shell 还是先多学下 python 了...
wsds
2018-05-23 10:12:33 +08:00
@lieh222 确定
@walleL shell 中有分号吗,没见过啊
wsds
2018-05-23 10:12:45 +08:00
@xiaket 要会的话,我就不来这里提问了
xiaket
2018-05-23 10:14:00 +08:00
@wsds 根据#11 来看,你先多学下 shell 吧
shuizhengqi
2018-05-23 10:18:00 +08:00
我第一次知道 shell 居然还有纯 shell 脚本一说
lieh222
2018-05-23 10:19:44 +08:00
@wsds 你要先进一个目录在执行脚本其实是两条命令,bash 多条命令需要用;分隔,你执行的是脚本需要用 bash 执行,用./的话需要在脚本第一行申明解析器,os.system 不接受标准输入,所以你的密码输不进去,可以 sudo 执行 python 脚本,这里就不需要用 sudo 了
einvince
2018-05-23 10:20:13 +08:00
cd test && sudo ./start.sh
princelai
2018-05-23 10:39:38 +08:00
pexpect,支持输入密码,等待加载等功能。subprocess.run()只支持一步操作,反正多个操作我没模拟成功
ClutchBear
2018-05-23 10:49:57 +08:00
绝对路径就是了
cdlnls
2018-05-23 10:52:10 +08:00
&&
virusdefender
2018-05-23 11:15:08 +08:00
def run_sh(command, strict=True):
cmd = [b"bash"]
if strict:
cmd.append(b"-e")
return subprocess.run(cmd, input=command.encode("utf-8"), stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=strict)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/457026

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX