如何在Python中调用自定义的命令行函数

时间:2014-04-25 10:47:15

标签: python bash command-line os.system

我试图在python中调用自定义的命令行函数。我使用/.bash_profile中的apple脚本定义了我的函数,如下所示:

function vpn-connect  {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "YESVPN" -- your VPN name here
                if exists VPN then connect VPN
                repeat while (current configuration of VPN is not connected)
                    delay 1
                end repeat
        end tell
end tell
EOF
}

当我在$ vpn-connect中测试bash时,vpn-connect工作正常。我的VPN连接很好。

所以我创建了vpn.py,其中包含以下代码:

import os

os.system("echo 'It is running.'")
os.system("vpn-connect")

我用python vpn.py运行它并得到以下输出:

vpn Choushishi$ python vpn.py 
It is running.
sh: vpn-connect: command not found

这证明调用自定义函数与调用系统预定义函数有某种不同。我查看过pydoc os但无法找到有用的信息。

1 个答案:

答案 0 :(得分:3)

  1. 一种方法是先阅读./bash_profile。正如@anishsane指出你可以这样做:

    vpn=subprocess.Popen(["bash"],shell=True,stdin= subprocess.PIPE)
    vpn.communicate("source /Users/YOUR_USER_NAME/.bash_profile;vpn-connect")
    
  2. 或使用os.system

    os.system('bash -c "source /Users/YOUR_USER_NAME/.bash_profile;vpn-connect"')
    
  3. 或尝试

    import subprocess
    subprocess.call(['vpn-connect'], shell = True)
    
  4. 并尝试

    import os
    os.system('bash -c vpn-connect')
    

    根据http://linux.die.net/man/1/bash