【问题标题】:gksudo and python scriptgksudo 和 python 脚本
【发布时间】:2013-09-28 15:37:45
【问题描述】:

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

【问题讨论】:

    标签: python gksudo


    【解决方案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 个字节。

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

    【讨论】:

    • 我认为这会有所帮助,但不幸的是我的问题仍然存在。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多