gpt4 book ai didi

Python:PyCharm 中运行与 Debug模式下的不同行为

转载 作者:行者123 更新时间:2023-12-04 08:55:18 24 4
gpt4 key购买 nike

在没有附加调试器的情况下从 PyCharm 运行的 Python 代码与在附加 pydev 的情况下运行时的行为不同。

我正在运行 POX PyCharm 中的 SDN Controller 和 Mininet来自连接 POX 打开的监听套接字的控制台的模拟。在 Debug模式下运行时,POX 进程在 Mininet 模拟连接到它后立即完成,而不会产生任何错误,而在运行模式下它继续按预期工作。这是输出:

运行:

/usr/bin/python2.7 /home/wirate/pyretic/pyretic.py pyretic.sdx.main
Initialize SDX
SDX: {'_policy': drop, 'notify': None, 'arp_policy': [DynamicPolicy]
packets
FwdBucket}
Creating SDX environment from the config files
Adding Physical ports for A
Adding virtual ports for A
Adding Physical ports for C
Adding virtual ports for C
Adding Physical ports for B
Adding virtual ports for B
{u'A': {u'A': [1], u'C': [3], u'B': [2]}, u'C': {u'C': [3, 4]}, u'B': {u'B': [2]}}
{u'A': {u'A': [1], u'C': [3], u'B': [2]}, u'C': {u'A': [1], u'C': [3, 4], u'B': [2]}, u'B': {u'B': [2]}}
{u'A': {u'A': [1], u'C': [3], u'B': [2]}, u'C': {u'A': [1], u'C': [3, 4], u'B': [2]}, u'B': {u'A': [1], u'C': [3], u'B': [2]}}
Parsing participant's policies
Starting VNH Assignment
After new assignment
Virtual Next Hop --> IP Prefix: {'VNH1': set([u'110.0.0.0/24', u'100.0.0.0/24']), 'VNH2': set([u'140.0.0.0/24', u'150.0.0.0/24'])}
Virtual Next Hop --> Next Hop IP Address (Virtual): {'VNH1': '172.0.1.1', 'VNH2': '172.0.1.2', 'VNH': [IPAddress('172.0.1.0'), IPAddress('172.0.1.1'), IPAddress('172.0.1.2'), IPAddress('172.0.1.3'), IPAddress('172.0.1.4'), IPAddress('172.0.1.5'), IPAddress('172.0.1.6'), IPAddress('172.0.1.7'), IPAddress('172.0.1.8'), IPAddress('172.0.1.9'), IPAddress('172.0.1.10'), IPAddress('172.0.1.11'), IPAddress('172.0.1.12'), IPAddress('172.0.1.13'), IPAddress('172.0.1.14'), IPAddress('172.0.1.15')]}
Virtual Next Hop --> Next Hop Mac Address (Virtual) {'VNH1': aa:00:00:00:00:01, 'VNH2': aa:00:00:00:00:02, 'VNH': 'aa:00:00:00:00:00'}
Completed VNH Assignment
POX 0.2.0 (carp) / Copyright 2011-2013 James McCauley, et al.
Connected to pyretic frontend.
DEBUG:core:POX 0.2.0 (carp) going up...
DEBUG:core:Running on CPython (2.7.8/Oct 20 2014 15:05:19)
DEBUG:core:Platform is Linux-3.16.0-24-generic-x86_64-with-Ubuntu-14.10-utopic
INFO:core:POX 0.2.0 (carp) is up.
DEBUG:openflow.of_01:Listening on 0.0.0.0:6633
INFO:openflow.of_01:[00-00-00-00-00-01 1] connected

调试:
/usr/bin/python2.7 /home/wirate/pycharm-4.0/helpers/pydev/pydevd.py --multiproc --client 127.0.0.1 --port 49196 --file /home/wirate/pyretic/pyretic.py pyretic.sdx.main
pydev debugger: process 5555 is connecting

Connected to pydev debugger (build 139.574)
Initialize SDX
SDX: {'_policy': drop, 'notify': None, 'arp_policy': [DynamicPolicy]
packets
FwdBucket}
Creating SDX environment from the config files
Adding Physical ports for A
Adding virtual ports for A
Adding Physical ports for C
Adding virtual ports for C
Adding Physical ports for B
Adding virtual ports for B
{u'A': {u'A': [1], u'C': [3], u'B': [2]}, u'C': {u'C': [3, 4]}, u'B': {u'B': [2]}}
{u'A': {u'A': [1], u'C': [3], u'B': [2]}, u'C': {u'A': [1], u'C': [3, 4], u'B': [2]}, u'B': {u'B': [2]}}
{u'A': {u'A': [1], u'C': [3], u'B': [2]}, u'C': {u'A': [1], u'C': [3, 4], u'B': [2]}, u'B': {u'A': [1], u'C': [3], u'B': [2]}}
Parsing participant's policies
Starting VNH Assignment
After new assignment
Virtual Next Hop --> IP Prefix: {'VNH1': set([u'110.0.0.0/24', u'100.0.0.0/24']), 'VNH2': set([u'140.0.0.0/24', u'150.0.0.0/24'])}
Virtual Next Hop --> Next Hop IP Address (Virtual): {'VNH1': '172.0.1.1', 'VNH2': '172.0.1.2', 'VNH': [IPAddress('172.0.1.0'), IPAddress('172.0.1.1'), IPAddress('172.0.1.2'), IPAddress('172.0.1.3'), IPAddress('172.0.1.4'), IPAddress('172.0.1.5'), IPAddress('172.0.1.6'), IPAddress('172.0.1.7'), IPAddress('172.0.1.8'), IPAddress('172.0.1.9'), IPAddress('172.0.1.10'), IPAddress('172.0.1.11'), IPAddress('172.0.1.12'), IPAddress('172.0.1.13'), IPAddress('172.0.1.14'), IPAddress('172.0.1.15')]}
Virtual Next Hop --> Next Hop Mac Address (Virtual) {'VNH1': aa:00:00:00:00:01, 'VNH2': aa:00:00:00:00:02, 'VNH': 'aa:00:00:00:00:00'}
Completed VNH Assignment
pydev debugger: process 5595 is connecting

POX 0.2.0 (carp) / Copyright 2011-2013 James McCauley, et al.
POX 0.2.0 (carp) / Copyright 2011-2013 James McCauley, et al.
Connected to pyretic frontend.
DEBUG:core:POX 0.2.0 (carp) going up...
DEBUG:core:Running on CPython (2.7.8/Oct 20 2014 15:05:19)
DEBUG:core:Platform is Linux-3.16.0-24-generic-x86_64-with-Ubuntu-14.10-utopic
INFO:core:POX 0.2.0 (carp) is up.
DEBUG:openflow.of_01:Listening on 0.0.0.0:6633
INFO:openflow.of_01:[None 1] closed
INFO:openflow.of_01:[00-00-00-00-00-01 2] connected

Process finished with exit code 137

这是启动 Controller 的代码:
def main():
global of_client
(op, options, args, kwargs_to_pass) = parseArgs()
if options.mode == 'i':
options.mode = 'interpreted'
elif options.mode == 'r0':
options.mode = 'reactive0'
elif options.mode == 'p0':
options.mode = 'proactive0'
elif options.mode == 'p1':
options.mode = 'proactive1'
try:
module_name = args[0]
except IndexError:
print 'Module must be specified'
print ''
op.print_usage()
sys.exit(1)
try:
module = import_module(module_name)
except ImportError, e:
print 'Must be a valid python module'
print 'e.g, full module name,'
print ' no .py suffix,'
print ' located on the system PYTHONPATH'
print ''
print 'Exception message for ImportError was:'
print e
sys.exit(1)

main = module.main
kwargs = { k : v for [k,v] in [ i.lstrip('--').split('=') for i in kwargs_to_pass ]}

sys.setrecursionlimit(1500) #INCREASE THIS IF "maximum recursion depth exceeded"

# Set up multiprocess logging.
verbosity_map = { 'low' : logging.WARNING,
'normal' : logging.INFO,
'high' : logging.DEBUG,
'please-make-it-stop' : logging.DEBUG }
logging_queue = Queue()

# Make a logging process.
def log_writer(queue, log_level):
formatter = logging.Formatter('%(levelname)s:%(name)s: %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
handler.setLevel(log_level)
logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(log_level)
while(True):
try:
to_log = queue.get()
except KeyboardInterrupt, e:
print "\nkilling log"
import sys
sys.exit(0)
logger.handle(to_log)
log_level = verbosity_map.get(options.verbosity, logging.DEBUG)
log_process = Process(target=log_writer,args=(logging_queue, log_level,))
log_process.daemon = True
log_process.start()

# Set default handler.
logger = logging.getLogger()
handler = util.QueueStreamHandler(logging_queue)
logger.addHandler(handler)
logger.setLevel(log_level)

runtime = Runtime(Backend(),main,kwargs,options.mode,options.verbosity)
if not options.frontend_only:
try:
output = subprocess.check_output('echo $PYTHONPATH',shell=True).strip()
except:
print 'Error: Unable to obtain PYTHONPATH'
sys.exit(1)
poxpath = None
for p in output.split(':'):
if re.match('.*pox/?$',p):
poxpath = os.path.abspath(p)
break
if poxpath is None:
print 'Error: pox not found in PYTHONPATH'
sys.exit(1)
pox_exec = os.path.join(poxpath,'pox.py')
python=sys.executable
# TODO(josh): pipe pox_client stdout to subprocess.PIPE or
# other log file descriptor if necessary
of_client = subprocess.Popen([python,
pox_exec,
'--verbose',
'of_client.pox_client' ],
stdout=sys.stdout,
stderr=subprocess.STDOUT)

signal.signal(signal.SIGINT, signal_handler)
signal.pause()

也许我应该补充一点,我以 root 身份运行 PyCharm,因为启动 Controller 需要特权。

最佳答案

我的项目在调试中工作并在运行中失败。在修改过程中,这种情况发生在我身上好几次。
尝试的解决方案包括:

  • 重启 PyCharm
  • 更新
  • 更新到新的 PyCharm 安装
  • 清除缓存
  • 仅使用 python 文件开始一个新项目

  • 一件事为我解决了这个问题。
  • 我去了“运行”菜单->“附加到本地进程..”
  • 我选择了唯一可用的选项“pydevconsole.py”(还有一些进程 ID 跟在名称后面)。

  • 问题解决了;它在运行和调试中都有效。

    关于Python:PyCharm 中运行与 Debug模式下的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206328/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com