全局无法正常工作[Python]

时间:2016-07-21 00:42:25

标签: python

根据情况很难解释。我会尽力而为。

我正在制作一个程序,让新用户更容易使用漂网。 首先输入网关IP,然后输入目标IP,即您的界面。在程序中,一旦你输入所有这些,它会打开一个新的终端窗口,然后启动第二个程序,它翻转IP的原始顺序。我可以让用户手动切换它,但我希望它只是自动切换它。为此,我必须使用global来保存输入信息,因此它只会切换它。问题是,当我运行第二个程序时,它只是重新启动第一个程序。

#This it the first program

#"Driftnet.py"


import os
import time
from subprocess import call

def drift():
    global gateway
    gateway = raw_input("Gateway IP > ")
    time.sleep(0.5)
    global target
    target = raw_input("Target IP > ")
    time.sleep(0.5)
    global inter
    inter = raw_input("Interface > ")
drift()

call(["gnome-terminal"])

os.system("arpspoof -i " + inter + " -t " + gateway + " " + target)

我运行它,输入所有内容,然后打开第二个终端,然后我运行第二个程序来切换IP。

#This is the second program

#"Driftnet2.py"

import os
import time
from subprocess import call
import Driftnet

os.system("arpspoof -i " + Driftnet.inter + " -t " + Driftnet.target + " " + Driftnet.gateway)

当我运行它时,它几乎只运行frist程序,从" Gateway IP>的问题开始。 "

我完全不知道自己做错了什么。

由于

3 个答案:

答案 0 :(得分:1)

我不知道“Driftnet”是什么,我不确定你要做什么,但我可以解释你所看到的行为。

在Driftnet2.py中,您致电:

import Driftnet

导致评估Driftnet.py中的Python代码。这就是import语句的作用。您的所有代码都是顶级代码(drift()方法除外,它是从顶层调用的),因此导入它会运行它。

您只有一个方法,而且没有顶级变量,因此global声明无效。 (看起来您认为global关键字适用于IPC,但我不确定。)

要设计此程序,您需要先退后一步并回答一些基本问题。比如,如果您想在一个进程中将Driftnet.py中的信息传输到另一个进程中的Driftnet2.py,那么该传输将如何发生? (命令行标志?环境变量?Unix域套接字?)一旦你知道你希望你的程序做什么,我们就可以帮助你实现它。

答案 1 :(得分:0)

您是否尝试在导入后添加全局变量等...然后将var inside函数调用为全局变量?

import os
import time
from subprocess import call
gateway = ''
target = ''
inter = ''

答案 2 :(得分:0)

这就是if __name__=='__main__':结构的存在。将Driftnet.py中的代码更改为:

import os
import time
from subprocess import call

def drift():
    global gateway
    gateway = raw_input("Gateway IP > ")
    time.sleep(0.5)
    global target
    target = raw_input("Target IP > ")
    time.sleep(0.5)
    global inter
    inter = raw_input("Interface > ")

if __name__=='__main__':
    drift()

    call(["gnome-terminal"])

    os.system("arpspoof -i " + inter + " -t " + gateway + " " + target)

您可能还有一点修改Driftnet2.py。我不确定您是否能够通过import Driftnet访问全局变量。如果您遇到错误,请尝试使用import __main__ as Driftnet