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