【问题标题】:How to debug code run using Popen in Pycharm如何在 Pycharm 中使用 Popen 调试代码运行
【发布时间】:2020-08-21 14:45:59
【问题描述】:

我正在运行一个从其他人那里继承而来的代码库,它大量使用了用户输入。出于这个原因,我使用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) 通过接受来自用户的几个输入参数来模拟我提供的源代码的行为:

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))

运行代码工作正常,我得到了预期的输出。

调试代码部分有效,但部分无效。调试器成功附加到子进程p 以便放置在example.py 中的任何断点都将起作用。但是,调试 console 似乎没有成功附加到子进程。当我尝试在调试控制台中输入一些变量时,它们不会打印出来,即使它们在我的调试会话中显示为活动变量。

编辑

事实证明这可能是一个错误。我在 pycharm 的官方论坛上问过同样的问题,他们提出了一个问题:

https://intellij-support.jetbrains.com/hc/en-us/community/posts/360009571680-Debugging-code-run-through-subprocess-Popen

所以我想我要寻找的是一种有效的解决方法,它允许我使用常规的 python 解释器和调试器来检查和运行变量操作。

【问题讨论】:

  • 请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。
  • 您好 user32882。请注意,我每周都会进行几次这样的对话——据我所知,技术写作是这里的首选格式,并且(重要的是)版主倾向于支持这种观点。对于它的价值,我倾向于同意它,因为我认为它使帖子简洁,更容易作为未来的参考资料阅读。如果您愿意,我可以为您指出一些已讨论过的 Meta 帖子?
  • 我一定很想知道讨论了什么
  • 太棒了!请参阅 herehere,它们都在 Stack Overflow Meta 上。有一些通用的editing advice here,包括关于消除“噪音”的建议。在整个 Stack Exchange Meta 上,规范可能是 here。关于mutual editing is here的一些建议。

标签: python pycharm subprocess


【解决方案1】:

我在 python 和 docker 日志方面遇到了类似的问题。解决的问题是使用 -u 标志运行 python,如here 所述。也许尝试更改您的 Popen 调用以使用 python,然后包含 -u 标志。例如Popen(["python", "-u", "example2.py"], stdout=PIPE, stdin=PIPE, stderr=STDOUT, encoding='utf-8')

【讨论】:

  • 好吧,这根本没有帮助。
猜你喜欢
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 2021-03-10
  • 2019-11-22
  • 1970-01-01
相关资源
最近更新 更多