我试图在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
但无法找到有用的信息。
答案 0 :(得分:3)
一种方法是先阅读./bash_profile。正如@anishsane指出你可以这样做:
vpn=subprocess.Popen(["bash"],shell=True,stdin= subprocess.PIPE)
vpn.communicate("source /Users/YOUR_USER_NAME/.bash_profile;vpn-connect")
或使用os.system
os.system('bash -c "source /Users/YOUR_USER_NAME/.bash_profile;vpn-connect"')
或尝试
import subprocess
subprocess.call(['vpn-connect'], shell = True)
并尝试
import os
os.system('bash -c vpn-connect')