gksudo和python脚本

时间:2013-09-28 15:37:45

标签: python gksudo

嗨,我现在有一个小问题,但仍然存在问题。我的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., 布鲁克斯拉迪。

1 个答案:

答案 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个字节。

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