在 Python (cron) 中获取 shell 命令的输出?
Getting output of shell commands in Python (cron)?
我正在尝试编写一个脚本来检测我当前的 wifi 连接并在我的本地计算机上启动一个 socks 代理。
当我自己执行时,脚本本身工作正常。因为我希望一切都是自动的,所以我在考虑使用 crontab。唯一的问题是 crontob 本身没有输出,因此方法 return 是一个空字符串。
有人对此有解决方案吗?我的脚本如下所示:
#!/usr/bin/python
from subprocess import Popen, PIPE
import re, os
location = Popen(['networksetup', '-getcurrentlocation'], stdout=PIPE).stdout.read().split('\n')[0]
ssid = ''
for item in Popen(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport', '-I'], stdout=PIPE).stdout.read().splitlines():
if ' SSID' in item:
ssid = item.strip().split(': ')[-1]
if location != 'xyz' and ssid == 'abc':
# start socks proxy
pass
elif location == 'xyz' and ssid != 'abc':
# kill socks proxy
pass
print location, '|', ssid
我正在研究 Mac OS 10.10.1 如果有人想知道的话。
实际上 Popen
应该 return 处理输出,当你 运行 很多时候和通过 cron。
尝试在 Popend 中将 stderr 重定向到 stdout:stderr=sys.stdout.buffer
(python3) 并读取输出,为什么无法执行命令。
可能您的脚本是 运行 作为 root
(如果您编辑了 /etc/crontab),请尝试将行更改为
*/10 * * * * Exceen python /Users/Exceen/Scripts/autoproxy.py
尝试将完整路径写入 networksetup
二进制文件。 Cron 作业可以有不同的 $PATH
,缺少 /usr/bin/(或任何网络设置)
我正在尝试编写一个脚本来检测我当前的 wifi 连接并在我的本地计算机上启动一个 socks 代理。 当我自己执行时,脚本本身工作正常。因为我希望一切都是自动的,所以我在考虑使用 crontab。唯一的问题是 crontob 本身没有输出,因此方法 return 是一个空字符串。
有人对此有解决方案吗?我的脚本如下所示:
#!/usr/bin/python
from subprocess import Popen, PIPE
import re, os
location = Popen(['networksetup', '-getcurrentlocation'], stdout=PIPE).stdout.read().split('\n')[0]
ssid = ''
for item in Popen(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport', '-I'], stdout=PIPE).stdout.read().splitlines():
if ' SSID' in item:
ssid = item.strip().split(': ')[-1]
if location != 'xyz' and ssid == 'abc':
# start socks proxy
pass
elif location == 'xyz' and ssid != 'abc':
# kill socks proxy
pass
print location, '|', ssid
我正在研究 Mac OS 10.10.1 如果有人想知道的话。
实际上 Popen
应该 return 处理输出,当你 运行 很多时候和通过 cron。
尝试在 Popend 中将 stderr 重定向到 stdout:
stderr=sys.stdout.buffer
(python3) 并读取输出,为什么无法执行命令。可能您的脚本是 运行 作为
root
(如果您编辑了 /etc/crontab),请尝试将行更改为
*/10 * * * * Exceen python /Users/Exceen/Scripts/autoproxy.py
尝试将完整路径写入
networksetup
二进制文件。 Cron 作业可以有不同的$PATH
,缺少 /usr/bin/(或任何网络设置)