我在Python中遇到的一件事是將信息從一個函數傳遞到另一個函數,然後將其更改並傳遞迴原始函數以便有用。看看這個非常基本的例子,試圖創建一個可以被各種其他函數調用的ping函數。將變量從一個函數傳遞到另一個函數
import subprocess
pingchk = 0
def pinger(pcName, pingchk):
ping_out = subprocess.Popen(["ping", "-n", "1", pcName],stdout = subprocess.PIPE).communicate()[0]
if ('unreachable' in ping_out):
print "Warning", "PC not responding 1."
pingchk += 1
return pingchk
elif ('Request timed out.' in ping_out):
print "Warning", "PC not responding 2."
pingchk += 1
print pingchk
return pingchk
elif ('Ping request could not find host' in ping_out):
print "Warning", "PC not responding 3."
pingchk += 2
print pingchk
return pingchk
else:
print "Machine available!"
def someFunction():
pcName = raw_input("Please enter a pc name: ")
pinger(pcName, pingchk)
print pingchk
if pingchk == 1:
print "machine not switched on."
elif pingchk == 2:
print "machine name not recognized."
else:
print "success - machine on."
someFunction()
這是我在努力的pingchk
位。在這個例子中someFunction
正在通過machineName
到pinger
做這項工作,然後我想pinger
把結果傳回someFunction
去使用。但是,someFunction
從不重新讀取變量pingchk
,因此始終將其讀取爲0
。
我需要更改哪些內容才能將pinger
的結果回傳給原始函數以供使用?
'pingchk = pinger(pcName,pinkchk)'? – jonrsharpe
@jonrsharpe - 謝謝你的回覆,但如果我嘗試它聲稱它在被賦值之前被引用... – user3514446
@jonrsharpe也許你錯過了它,但是'pinger(pcName,'**'pinkchk)'**使用該值的全局變量,通過引入賦值,使其成爲局部變量,它在分配之前是引用(作爲pinger的參數)。 –