使用 vscode 运行 Python 的问题。

2017-11-13 04:00:00 +08:00
 SimbaPeng
import os

print('Process ({}) start...'.format(os.getpid()))

# 创建子进程
pid = os.fork()

使用 vscode 运行这段代码,居然会输出 2 次 Process ... start ... 。 用终端调用就没问题,只输出一次。



import time

print(1)
time.sleep(5)

然后运行这段代码的时候,会等到 5 秒之后才输出 1.


import sys

import time

print(1)
sys.stdout.flush()
time.sleep(5)

必须加上 sys.stdout.flush() 这个才会马上输出。。。


我用的是 macbook pro

vscode 的 task.json 是这样的:

{
"version": "0.1.0",
"command": "${config:python.pythonPath}",
"type": "shell",
"args": ["${file}"]
}

使用 sublime 和 PyCharm 运行 python 脚本就没这 2 个问题
3808 次点击
所在节点    Python
10 条回复
rogwan
2017-11-13 07:20:06 +08:00
vscode 的哪个版本?
SimbaPeng
2017-11-13 09:31:33 +08:00
@rogwan 1.18.0
rogwan
2017-11-13 09:44:50 +08:00
最新版还没试过,有空去下个测试下,IDE 多多少少都有提示不准确的情况,这种运算逻辑的问题太严重了
debuggerx
2017-11-13 09:59:35 +08:00
延迟那个是不是因为 python 的输出缓冲?试试在 command 里加上-u 参数?并不用 vsc,感觉它调用 shell 的方式很难用……
clino
2017-11-13 10:08:22 +08:00
第一个我试过了只打一次啊
第二个应该就是 stdio 的缓冲,方法就是 4 楼的加参数了
onlyice
2017-11-13 10:23:45 +08:00
正常,print 打到 stdout 是块缓冲的,缓冲区在 fork 时一起给到子进程

你需要 sys.stderr.write
SimbaPeng
2017-11-13 10:57:21 +08:00
@onlyice 哦哦,那为什么直接使用终端 print 没有缓冲呢?
onlyice
2017-11-13 11:02:56 +08:00
@SimbaPeng 大概是你的终端做了什么手脚。。
SimbaPeng
2017-11-13 11:26:28 +08:00
@onlyice 我看了下文档明白了,输出到控制台的时候是使用的行缓冲
zhusimaji
2017-11-13 11:38:09 +08:00
实测没有楼主的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/405823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX