嗨,我现在有一个小问题,但仍然存在问题。我的python脚本在通过gksudo运行时似乎无序执行。第一个if块中的系统命令在之前执行,
print ("Removing Partial, Unneeded, And Obsolete Packages...");
那一行。
这是我脚本的其余部分:
#!/usr/bin/env python
import os;
F1 = open('/tmp/F1.txt', 'r').read();
F2 = open('/tmp/F2.txt', 'r').read();
F3 = open('/tmp/F3.txt', 'r').read();
F4 = open('/tmp/F4.txt', 'r').read();
F5 = open('/tmp/F5.txt', 'r').read();
os.system("rm /tmp/F1.txt");
os.system("rm /tmp/F2.txt");
os.system("rm /tmp/F3.txt");
os.system("rm /tmp/F4.txt");
os.system("rm /tmp/F5.txt");
if F1=="1":
print ("Removing Partial, Unneeded, And Obsolete Packages...");
os.system ("sudo apt-get clean -y -f");
os.system ("sudo apt-get autoremove -y -f");
os.system ("sudo apt-get autoclean -y -f");
open('/tmp/Point.txt', 'w').write("2");
print ("...Done");
if F2=="1":
print ("Clearing Temporary Files...");
os.system ("sudo rm -rf /tmp/*");
open('/tmp/Point.txt', 'w').write("3");
print ("...Done");
if F3=="1":
print ("Clearing Unused Thumbnails...");
os.system ("rm -f ~/.thumbnails/normal/*");
open('/tmp/Point.txt', 'w').write("4");
print ("...Done");
if F4=="1":
print ("Clearing Downloads Folder...");
os.system ("rm -r ~/Downloads/*");
open('/tmp/Point.txt', 'w').write("5");
print ("...Done");
if F5=="1":
print ("Emptying Trash...");
os.system ("rm -rf ~/.local/share/Trash/*");
open('/tmp/Point.txt', 'w').write("6");
print ("...Done");
print ("");
os.system("rm /tmp/Point.txt");
print ("Cleanup Complete.");
请帮助A.S.A.P., 布鲁克斯拉迪。
答案 0 :(得分:1)
虽然这只是一个猜测,但我希望你所看到的是I/O buffering的结果。如果这是在Python 3.3或更高版本中,请尝试print(message, flush=True)
。在Python 2中,您需要调用sys.stdout.flush()
- 但只有在未确定stdout是终端时才会发生这种情况。例如,如果由cron运行,或者通过管道传输到另一个程序。要演示此问题,请运行脚本:
import time, sys
print "hello there"
#sys.stdout.flush()
time.sleep(2)
print "bye"
如果使用python script
运行,它可以正常工作,但如果以python script | dd bs=1
运行,则在两秒钟过去之前不会显示任何内容,此时两条打印线都会出现。删除#
,以便发生刷新,解决了这个问题。
这种I / O缓冲的原因是收集大量小打印件,减少了对外部I / O的调用次数。它很少有明显的区别,但最终可能很重要,例如耗尽的存储器或具有固定块大小的I / O设备。我用来显示差异的dd
命令使用可配置参数进行缓冲,在本例中为1个字节。
顺便说一下,脚本中的所有分号都是不必要的。