dbn
dbn

Reputation: 13940

How to get full command executed using sh module?

I ran into an error while executing one of our devops scripts. The script uses the sh package (for executing common unix commands, pypi link). However, the commands that are executed are truncated in the messages printed by sh. How can I see the whole command that was executed?

example:

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

Produces output like:

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

I'd like to see the full command executed, and all of the call_args.

Upvotes: 0

Views: 515

Answers (2)

Robᵩ
Robᵩ

Reputation: 168726

sh.ssh returns an sh.RunningCommand object, which you can query to find the call args and the 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)

Upvotes: 1

After peeking into the source code, it looks like this is controlled by the max_len parameter of the friendly_truncate function, so one option may be to edit the sh.py code directly and set a higher int value:

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

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

Or, possibly just remove points where that function is called.

Upvotes: 0

Related Questions