我有一个正在运行的脚本。我做了一个小改动,现在它停止了工作。顶级版本有效,而底层版本失败。
def makelocalconfig(file="TEXT"):
host = env.host_string
filename = file
conf = open('/home/myuser/verify_yslog_conf/%s/%s' % (host, filename), 'r')
comment = open('/home/myuser/verify_yslog_conf/%s/localconfig.txt' % host, 'w')
for line in conf:
comment.write(line)
comment.close()
conf.close()
def makelocalconfig(file="TEXT"):
host = env.host_string
filename = file
path = host + "/" + filename
pwd = local("pwd")
conf = open('%s/%s' % (pwd, path), 'r')
comment = open('%s/%s/localconfig.txt' % (pwd, host), 'w')
for line in conf:
comment.write(line)
comment.close()
conf.close()
出于问题排查目的,我添加了print pwd
和print path
行,以确保变量正确填充。 pwd
空洞。为什么这个变量没有正确设置?我使用相同的格式
var = sudo(" cmd")
每时每刻。 local
与sudo
和run
不同吗?
答案 0 :(得分:1)
简而言之,您可能需要添加capture=True
:
pwd = local("pwd", capture=True)
local
运行命令本地:
围绕使用内置Python子进程的便利包装器 模块与shell = True激活。
run
在远程服务器上运行命令,sudo
以超级用户身份运行远程命令。
文档中还有一个注释:
local当前不能同时打印和捕获输出,就像run / sudo那样。捕获kwarg允许您根据需要在打印和捕获之间切换,默认为False。
当capture = False时,本地子进程'stdout和stderr流直接连接到您的终端,但您可以使用全局输出控件output.stdout和output.stderr来隐藏其中一个或两个。在此模式下,返回值的stdout / stderr值始终为空。