python os.system似乎没有任何理由挂起

时间:2013-04-21 00:43:18

标签: python ssh os.system

所以我正在监视众多文件的修改时间。更新文件后,我将其通过ssh复制到另一台机器上。这是我所拥有的SSCCE:

import os
import time

send = "/home/pi/PythonScripts/tempData.txt"
check = "/home/pi/PythonScripts/check.txt"

statbuf = os.stat(send)
print "Modification time:",statbuf.st_mtime 

def wr2(data):
    file2 = open(check, 'w')
    file2.write(str(data))
    file2.close()
    return 0

def rd():
    file = open(send, 'r')
    line2 = file.readline()
    file.close()
    return line2

def rd2():
    file2 = open(check, 'r')
    line2 = file2.readline()
    file2.close()
    return line2


while(run):
   try:
    statbuf = os.stat(send)
    line2 = rd2()
    print line2

    if (str(statbuf.st_mtime) == line2):
       print "File has not changed...\n"
       time.sleep(1)
    else:
       data = rd()
       print "Data in File: " + data
       os.system("sudo scp /home/pix/PythonScripts/tempData.txt server1:/home/tix/Server1_SSH/Real_Data.txt")
       wr2(statbuf.st_mtime)
       print "New Modification Time:",statbuf.st_mtime 
       time.sleep(1)



   except (KeyboardInterrupt, SystemExit):
        print '\nKeyboard Interrupt Caught!'
        run = 0
        raise

所以当它到达os.system()命令时,它挂起来没有做任何事情......但是当我在python解释器上运行相同的确切代码时,它工作得很好。我似乎无法理解问题是什么......任何帮助都会很棒!

1 个答案:

答案 0 :(得分:2)

sudo 可能是罪魁祸首,可能要求输入密码。

而不是 os.system ,请尝试使用subprocess module。这将让您看到 stdout stderr 流以查看正在发生的事情。

另外,我会质疑在脚本中使用 sudo 的做法。通常,使用 sudo 的决定将留给调用Python脚本的人。