全局无法正常工作[Python]

2024-09-30 01:23:38 发布

您现在位置: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)

当我运行它时,它几乎只运行第一个程序,从“Gateway IP>

我完全不知道我做错了什么。你知道吗

谢谢


Tags: 用户import程序ip终端targetinputraw
3条回答

我不知道什么是“漂网”,我也不知道你到底想做什么,但我可以解释你看到的行为。你知道吗

在Driftnet2.py中,您可以调用:

import Driftnet

这导致Python代码漂流网.py待评估。这就是import语句所做的。所有代码都是顶层的(除了从顶层调用的drift()方法),因此导入它会运行它。你知道吗

您只有一个方法,并且没有顶层变量,因此global声明是无用的。(似乎你认为global关键字是IPC的,但我不确定。)

要设计这个程序,首先需要退一步回答一些基本问题。比如,如果你想从漂流网.py在一个进程到另一个进程中的Driftnet2.py的过程中,该传输将如何发生?(命令行标志?环境变量?Unix域套接字?)一旦你知道你想要你的程序做什么,我们可以帮助你实现它。你知道吗

您是否尝试过在导入后添加全局变量等,然后将函数内部的var调用为全局变量?你知道吗

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

这就是^{}构造存在的目的。更改中的代码漂流网.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。你知道吗

相关问题 更多 >

    热门问题