如何使用sh模块执行完整命令?

时间:2016-02-26 00:59:14

标签: python

我在执行一个devops脚本时遇到了错误。该脚本使用sh包(用于执行常见的unix命令pypi link)。但是,执行的命令在sh打印的消息中被截断。如何查看已执行的整个命令?

示例:

import sh   
sh.ssh(host,
       'rsync -av {src} {dst}'.format(src=src,
                                      dst=dst),
       _out=sys.stdout
   )

生成输出,如:

INFO:sh.command:<Command '/bin/ssh dbw@ny...(77 more)' call_args {'bg': False, 'timeo...(522 more)>: starting process

我希望看到执行完整的命令,以及所有call_args。

2 个答案:

答案 0 :(得分:1)

sh.ssh会返回一个sh.RunningCommand对象,您可以查询该对象以查找调用args和cmd:

import sh   
a=sh.ssh(host,
       'rsync -av {src} {dst}'.format(src=src,
                                      dst=dst),
       _out=sys.stdout
   )
print(a.cmd)
print(a.call_args)

答案 1 :(得分:0)

在查看源代码后,看起来这是由max_len函数的friendly_truncate参数控制的,因此一个选项可能是直接编辑sh.py代码并设置更高的int值:

https://github.com/amoffat/sh/blob/master/sh.py#L424

https://github.com/amoffat/sh/blob/master/sh.py#L425

或者,可能只是删除调用该函数的点。