【问题标题】:My Mac network location script is broken我的 Mac 网络位置脚本已损坏
【发布时间】:2023-03-29 03:17:01
【问题描述】:

我开始学习 python,我决定从我认为是一个简单的脚本开始,但我想不是。我要做的就是返回我在 Mac 上使用的当前网络位置。每次我运行它时,它都会返回正确的位置,但是当我尝试更改它时,什么也没有发生。我不知道我做错了什么,所以这是我的代码。我真的希望有人能帮助我。这个脚本是 MACS 独有的。我知道“scselect”是内置的,但我想看看它是否可以用 Python 完成。我知道下面的代码很粗糙,但随着我的学习,我会做得更好。我正在使用 Python 2.7。

import subprocess

loc = "scselect"
srn = "scselect SRN"
home = "scselect HOME"

a = subprocess.check_output(loc, shell=True)

print "\n##### NETWORK SELECTION #####"
print "\nYour current location is set to \n\n%s" % a

choice = raw_input("Please select what location you want to change to: ")

b = subprocess.Popen(srn, shell=True, stdout=subprocess.PIPE)
c = subprocess.Popen(home, shell=True, stdout=subprocess.PIPE)

choice = int(choice)

if choice == 1:
    print "\nSwitching to HOME...\n"
    c
elif choice == 2:
    print "\nSwitching to SRN...\n"
    b
else:
    print "\nShutting down...\n"

【问题讨论】:

  • "[...] 但是当我尝试更改它时,什么也没有发生。"当您说什么都没有发生时,您的意思是在您输入您的选择后,您不会从脚本中得到任何输出?
  • @user2495187:我也不明白那句话。我认为您的意思是 subprocess.check_output 按预期工作,但 subprocess.Popen 行似乎并没有改变网络。我说的对吗?
  • @KyleG。这是我得到输出的奇怪部分: Switching to HOME... SCPreferencesCommitChanges() failed

标签: python macos networking python-2.7


【解决方案1】:

您先运行 两个 scselect 命令,然后只显示其中一个命令的输出

当您来到if choice == 1 等时,bc 都已设置并已捕获命令的输出。 scselect SRN scselect HOME 都已运行,最后一个撤消了第一个命令执行的任何操作。

subprocess 调用移动到if 语句中:

if choice == 1:
    print "\nSwitching to HOME...\n"
    output = subprocess.Popen(home, shell=True, stdout=subprocess.PIPE)
    print output

【讨论】:

  • 非常感谢 Martijn Pieters。有用!!!。我现在有一个问题,当它运行命令时,我得到一个像 这样的十六进制代码。是否可以让它不打印?
  • @user2495187:您正在打印Popen() 返回对象。如果您想要只是输出,请再次使用subprocess.check_output()
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多