【问题标题】:Writing stdout into a file while executing it on the remote host在远程主机上执行时将标准输出写入文件
【发布时间】:2020-04-13 17:32:38
【问题描述】:

我正在编写一个从远程主机本身捕获 FQDN 的 python 脚本,只是为了进行一些健全性检查,下面是我试图运行的小代码,并希望从 i 将相同的标准输出捕获到我当前的主机中'正在运行它,而是它在远程主机中创建文件,而不是我正在运行的那个。

#!/usr/bin/python3
system_name = socket.gethostname()
f = open("output.txt", "a")
print("Hostname: {}".format(system_name, file=f)
f.close()

#!/usr/bin/python3
system_name = socket.gethostname()
sys.stdout=open("output.txt","a")
print("Hostname: {}".format(system_name)
sys.stdout.close()

即使我尝试过采用like,但也没有用。

name = 'mycurrenthost'
system_name = socket.gethostname()
short_sysname = socket.gethostname().split('.', 1)[0]

if short_sysname == name:
  f = open("output.txt", "a")
  print("Hostname: {}".format(system_name), file=f)
  f.close()

我的例子 myhostlist 看起来像..

mydbhost1
mydbhost2
mydnhost3
mydbhost4

下面是我如何执行上面的代码..

$ for host in `cat myhostlist`;do timeout -t 20 ssh -o "StrictHostKeyChecking no" "$host" "python -s" < ./myPythonScript.py;done

我在当前控制台上的输出,而不是写入文件...

Hostname: mydbhost1.example.com
Hostname: mydbhost2.example.com:
Hostname: mydnhost3.example.com:
Hostname: mydbhost4.example.com:

请帮忙

【问题讨论】:

    标签: python python-3.x linux stdout


    【解决方案1】:

    您正在远程主机上运行 python 应用程序;你期望它做什么?它在远程主机上运行,​​它写入远程主机上的文件 - 它无法写入本地文件 - 它无权访问您启动 ssh 会话的文件系统。

    相反,您可以只使用print 将结果打印到标准输出,然后在命令后使用&gt;&gt; output.txt 在shell 中本地捕获标准输出(&gt;&gt; 意味着输出将附加到output.txt )。

    【讨论】:

    • 好吧,你的意思是没有办法将当前shell上显示的打印内容收集到文件中?是的,将输出重定向到 shell 始终是一种选择。
    • 不在python程序本身内,不。它在远程服务器上运行,并且无法将内容写入您的本地存储区域(这将是一场安全噩梦)。在远程服务器上调用 python 进程,这就是代码运行的地方。通过 shell 重定向支持将输出重定向到本地文件(并确保不在远程服务器上运行重定向)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多