[英]How to debug code run using Popen in Pycharm
我正在运行一个从其他人那里继承的代码库,它广泛使用了用户输入。 出于这个原因,我使用subprocess.Popen
运行它。 这是一个例子。 以下脚本 ( caller.py
) 调用第三方代码。
from subprocess import Popen, PIPE, STDOUT
import sys
user_input = ['John', '555']
communicate_argument = '\n'.join(user_input)
p = Popen([sys.executable, 'example2.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT, encoding='utf-8')
stdout, stderr = p.communicate(communicate_argument)
print(stdout)
以下脚本 ( example.py
) 通过接受来自用户的几个输入 arguments 来模拟我提供的源代码的行为:
name = input('What is your name\n')
age = input('What is your age\n')
print('You are {}, and you are {} years old'.format(name, age))
运行代码工作正常,我得到了预期的 output。
调试代码部分有效,但部分无效。 调试器成功附加到子进程p
以便放置在example.py
中的任何断点都可以工作。 但是,调试控制台似乎没有成功附加到子进程。 当我尝试在调试控制台中输入一些变量时,即使它们在我的调试 session 中显示为活动变量,它们也不会打印出来。
编辑
事实证明这可能是一个错误。 我在 pycharm 的官方论坛上问过同样的问题,他们提出了一个问题:
所以我想我要寻找的是一种有效的解决方法,它允许我使用常规的 python 解释器和调试器来检查和运行变量操作。
我对 python 和 docker 日志有类似的问题。 解决的问题是使用 -u 标志运行 python ,如此处所述。 也许尝试更改您的 Popen 调用以使用 python 然后包含 -u 标志。 例如Popen(["python", "-u", "example2.py"], stdout=PIPE, stdin=PIPE, stderr=STDOUT, encoding='utf-8')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.