Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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_Paramiko - Fatal编程技术网

Python 源命令不生效

Python 源命令不生效,python,linux,paramiko,Python,Linux,Paramiko,我有一个计算机集群,我编写了一个Python脚本来更改主机名;代码如下 让我困惑的是源代码命令只在某些机器上生效,而不是在所有机器上生效。重复几次之后,所有主机名都会生效[顺便说一句:我可以在/etc/hostname中更改主机名,但主机名服务不会生效。] import paramiko import time import threading import os cmd0 = "sudo source /root/.bashrc" cmd1 = "sudo service hostname

我有一个计算机集群,我编写了一个Python脚本来更改主机名;代码如下

让我困惑的是
源代码
命令只在某些机器上生效,而不是在所有机器上生效。重复几次之后,所有主机名都会生效[顺便说一句:我可以在
/etc/hostname
中更改主机名,但主机名服务不会生效。]

import paramiko
import time
import threading
import os

cmd0 = "sudo source /root/.bashrc"
cmd1 = "sudo service hostname stop"
cmd2 = "sudo service hostname start"

def executeit(ip):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(ip, 22, "root")
    ssh.exec_command(cmd0)
    stdin, stdout, stderr = ssh.exec_command(cmd1)
    out = stdout.readlines()
    for o in out:
            print(o)
    time.sleep(1)
    ssh.exec_command(cmd2) 
    ssh.close()

    print("=======")

def main():
        fr = open("info.txt", "r")
        contents = fr.read().splitlines()
        fr.close()
        for ip in contents:
                t = threading.Thread(target=executeit, args=(ip,))
                t.start()

main()

您确定bash中所有机器上的默认shell吗<代码>源代码
仅在bash中有效;并且应该避免。您的代码中不使用
源代码,这会使问题变得不清楚。另外,您不需要
sudo
,因为您使用ssh作为
root
@BurhanKhalid。我所有的机器都是ubuntu12.04服务器版。@JohnZwinck噢,这是我的错误,我写了服务器脚本。source/etc/.bashrc命令不会在所有计算机上生效,sudo服务主机名也会在所有计算机上生效。我的答案是正确的。没有人在这里提到过这一点:如果运行
sudo source/some/script
,它不会执行您可能期望的操作——虽然脚本中的任何命令都在运行,但您将无法利用脚本设置的任何变量,因为它只会影响
sudo
设置的环境。