Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在远程服务器上运行命令以查找正常运行时间(秒)_Python_Linux_Python 3.x - Fatal编程技术网

Python 在远程服务器上运行命令以查找正常运行时间(秒)

Python 在远程服务器上运行命令以查找正常运行时间(秒),python,linux,python-3.x,Python,Linux,Python 3.x,以下是我目前掌握的情况: #!/usr/bin/python import sys import os import subprocess from subprocess import check_output import time import sh from sh import sshpass import re import time, datetime check_time = 0 with open("log.txt", "a") as f: while 1:

以下是我目前掌握的情况:

#!/usr/bin/python

import sys
import os
import subprocess
from subprocess import check_output
import time
import sh
from sh import sshpass
import re
import time, datetime
check_time = 0

with open("log.txt", "a") as f:
    while 1:
        #out = check_output(["sshpass", "-p", "pass", "ssh",
        #                    "theo@localhost", "\"/usr/bin/cat",
        #                    "/proc/uptime\""])
        #print (out)
        #out = str(out)
        uptime = sh.Command("/usr/bin/sshpass")
        result = uptime("-p", "pass", "ssh", "theo@localhost", "\"cat",
                        "/proc/uptime\"")
        result = str(result)
        print (result)
        result = result.split(' ', 1)[0]
        print (result)
        f.write(result)
        result_int = int(result)
        if result_int > check_time:
            print("it rebooted", result_int, "minutes ago")

        time.sleep(5)
结果:

检查正常运行时间
回溯(最近一次呼叫最后一次):
文件“/uptime.py”,第23行,在
结果=正常运行时间(“-p”、“通过”、“ssh”和“theo@localhost“,”cat“,“/proc/uptime\”)
文件“/usr/lib/python3.5/site packages/sh.py”,第1021行,在调用中__
返回RunningCommand(cmd、call_args、stdin、stdout、stderr)
文件“/usr/lib/python3.5/site packages/sh.py”,第486行,在__
self.wait()
文件“/usr/lib/python3.5/site packages/sh.py”,第500行,正在等待
self.handle\u命令\u退出代码(退出代码)
文件“/usr/lib/python3.5/site packages/sh.py”,第516行,在handle\u命令\u exit\u代码中
raise exc(self.ran、self.process.stdout、self.process.stderr)
sh.ErrorReturnCode_127:
运行:'/usr/bin/sshpass-p pass sshtheo@localhost“cat/proc/uptime”
标准:
标准:
zsh:1:没有这样的文件或目录:cat/proc/uptime
您可以看到,我有两次尝试,一次使用
sh
库,另一次使用check_输出,这两次尝试都会导致无法运行
/usr/bin/cat/proc/uptime
的相同错误

但是,正如您在回溯结束时所看到的:

RAN: '/usr/bin/sshpass -p pass ssh theo@localhost "cat /proc/uptime"'
这似乎是一个完全有效的行,如果我复制粘贴到终端它的作品

有什么想法吗?如果我只输入“正常运行时间”,该命令实际上是有效的,但与编辑该命令的输出以秒为单位获得时间相比,我认为这样做更容易(至少我认为是这样):)


我正在使用python 3.5.2

IRC上有人建议我使用
命令\u string=“cat/proc/cpu/”

result = uptime("-p", "pass", "ssh", "theo@localhost", command_string)

真管用

根据输出,您需要修改正常运行时间行,如下所示:

        result = uptime("-p", "pass", "ssh", "theo@localhost", "cat",
                    "/proc/uptime")

看起来“cat/proc/uptime”在原始代码中被ssh解释为一个参数。

看起来它试图执行文件
“cat/proc/uptime”
,而不是在
/proc/uptime
上运行
cat
。想象一下,这是一个你如何引用东西的问题。你在远程服务器上有足够的权限吗?我不知道引用哪里可能不正确。正如我所提到的,如果我在终端上运行,run:之后的那一行将非常有效。我有足够的权限。现在它实际上只是在本地主机上运行来测试它。以普通用户的身份运行cat/proc/uptime可以很好地工作。您可以尝试使用诸如,
“\'cat”、“/proc/uptime\”
这样的单引号吗;此外,由于它是关键字,请尝试使用与“传递”不同的单词。你应该在你现在没有做的地方定义你的
passwd
。哦,你是对的。。因为我看到的通过ssh运行远程命令的大多数示例都建议命令使用引号,所以我认为我必须这样做,但在测试之后,否则这似乎并不重要。当命令通过shell时,需要引号,但Python不是shell,用Python术语来说,shell希望运行
['ssh','theo@localhost“,'cat/proc/uptime']
在shell中编写的方法是
sshtheo@localhost“cat/proc/uptime”
。注意未加引号的空格如何变成参数分隔符,引号被丢弃,但保留引号之间的空格。