在python中使用os.system来运行带参数的程序

时间:2010-03-07 21:43:57

标签: python

如何让python运行sudo openvpn --cd / etc / openvpn --config client.ovpn

我正在尝试以下内容但没有成功

vpnfile2 = '/etc/init.d/openvpn'
cfgFile = 'client.ovpn'

os.system('sudo \"" + vpnFile2 + "\" --cd \"" + vpnpath + "\" --config \"" + cfgFile + "\"')

3 个答案:

答案 0 :(得分:8)

使用subprocess模块

import subprocess
subprocess.call(['sudo', vpnFile2, '--cd', vpnpath, '--config', cfgFile])

答案 1 :(得分:1)

这个问题已经发布了一段时间,但如果有人遇到这个问题(像我一样),还有另一种方法可以使用os.system方法获取权限。

只有在GUI环境中运行时才能使用它。 您可以简单地尝试使用'gksu'或('kdesu'或'kdesudo')调用它,它在gnome会话中看起来像这样:

import os
vpnfile2 = '/etc/init.d/openvpn'
cfgFile = 'client.ovpn'

os.system('gksu \"" + vpnFile2 + "\" --cd \"" + vpnpath + "\" --config \"" + cfgFile + "\"')

提示有效,但我没有测试它以使用您的代码。

答案 2 :(得分:0)

如果你有什么理由要使用os.system,而不是subprocess,我通常会通过bash来清洗它,所以     os.system('''sudo bash -c "command to run"''')(或者sh或者你拥有的任何外壳)。在许多情况下,它会更好地处理参数。