我试着编写这个脚本,只是在同一行上以一秒钟的延迟打印数字,但它不起作用。
这是有效的:
package com.example.abdul.myapplication;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.textView);
ActivityManager activityManager = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> procInfos = activityManager
.getRunningAppProcesses();
for (int idx = 0; idx < procInfos.size(); idx++) {
tv.setText(tv.getText() + "" + (idx + 1) + "."
+ procInfos.get(idx).processName + "\n");
}
}
}
但事实并非如此,程序只是冻结了:
from time import sleep
for n in range(1, 11):
print(n)
sleep(1)
任何人都可以解释为什么会这样吗?
答案 0 :(得分:2)
程序不会冻结,您只需要通过传递flush=True
:
print(n, end="", flush=True)
sys.stdout
,print
默认使用的流是行缓冲的(在交互模式下),如the documentation中所述:
- 交互时,标准流是行缓冲的
这意味着当遇到用于end
(\n
)的默认字符串时,将调用flush
。使用其他字符串(即''
)不会触发flush
,因此您必须使用flush=True
强制它。