0

嗨,我现在有一个小问题,但仍然是一个问题。我的 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.");

请尽快帮助,布鲁克斯·拉迪。

4

1 回答 1

1

虽然这只是一个猜测,但我希望您看到的是I/O 缓冲的结果。如果这是在 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"

如果运行 using python script,它工作得很好,但如果运行时python script | dd bs=1什么都不会显示,直到两秒钟过去,此时两条打印线都会出现。删除#,以便进行刷新,可以解决此问题。

这种 I/O 缓冲的原因是为了收集大量的小打印,减少对外部 I/O 的调用次数。这很少有明显的差异,但最终可能很重要,例如内存磨损或 I/O 设备具有固定块大小。dd我用来显示差异的命令确实使用可配置参数进行缓冲,在本例中为 1 个字节。

顺便说一句,脚本中的所有分号都是不必要的。

于 2013-09-28T15:55:52.767 回答