相关疑难解决方法(0)

在Python脚本中使用sudo

我正在尝试编写一个小脚本来在每次执行脚本时挂载VirtualBox共享文件夹.我想用Python做,因为我正在尝试用它来学习脚本.

问题是我需要权限才能启动mount命令.我可以将脚本作为sudo运行,但我更喜欢它自己创建sudo.

我已经知道将密码写入.py文件是不安全的,但我们谈的是一个根本不重要的虚拟机:我只想点击.py脚本并让它运行起来.

这是我的尝试:

#!/usr/bin/env python
import subprocess

sudoPassword = 'mypass'
command = 'mount -t vboxsf myfolder /home/myuser/myfolder'

subprocess.Popen('sudo -S' , shell=True,stdout=subprocess.PIPE)
subprocess.Popen(sudoPassword , shell=True,stdout=subprocess.PIPE)
subprocess.Popen(command , shell=True,stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

我的python版本是2.6

python shell subprocess

31
推荐指数
4
解决办法
11万
查看次数

如何使用 Pexpect 执行 root 命令?

我正在开发一个 python 程序来协助 apt-get 工具。我想使用 pexpect 下载所选的包。我相信我陷入了 child.expect 线。当涉及到该行时,似乎超时了。

butt = "vlc"
child = pexpect.spawn('sudo apt-get install ' + butt)
child.logfile = sys.stdout
child.expect('[sudo] password for user1: ')
child.sendline('mypassword')
Run Code Online (Sandbox Code Playgroud)

这是日志文件。

butt = "vlc"
child = pexpect.spawn('sudo apt-get install ' + butt)
child.logfile = sys.stdout
child.expect('[sudo] password for user1: ')
child.sendline('mypassword')
Run Code Online (Sandbox Code Playgroud)

更新:

密码发送得很好。它还期望下一行,但随后输入“Y”并且不执行任何操作。

child = pexpect.spawn('sudo apt-get install ' + butt)
child.logfile = sys.stdout
child.expect_exact('[sudo] password for user1: ')
child.sendline('mypass')
child.expect_exact('Do you want to continue? [Y/n] ')
child.sendline('Y')
Run Code Online (Sandbox Code Playgroud)

解决了:

我需要在最后添加这一行。

child.expect(pexpect.EOF, …
Run Code Online (Sandbox Code Playgroud)

python linux ubuntu pexpect

5
推荐指数
2
解决办法
4436
查看次数

标签 统计

python ×2

linux ×1

pexpect ×1

shell ×1

subprocess ×1

ubuntu ×1