Python的sh模块:如何查看待执行的构造命令字符串
在Python的sh模块中执行前查看最终Shell命令字符串
当然可行!sh模块本身就提供了简单直观的方式,让你在执行命令前就能拿到最终要运行的完整命令字符串,下面是两种常用的实现方法:
方法1:直接将命令对象转为字符串
当你用sh构建好命令但还没执行时(也就是还没加括号调用),直接把命令对象转成字符串就能得到完整的命令内容,sh会自动帮你处理参数的转义和格式,比如带空格的参数会自动加上引号:
import sh # 构建ls命令,暂不执行 ls_command = sh.ls("-l", "/tmp", color="never") # 打印最终命令字符串 print(str(ls_command)) # 输出示例:ls -l /tmp --color=never # 处理带空格的参数 echo_command = sh.echo("Hello, this is a test!") print(str(echo_command)) # 输出示例:echo 'Hello, this is a test!'
如果是管道命令,这种方式也能正确生成对应的管道字符串:
pipe_command = sh.ls("/tmp") | sh.grep("log") print(str(pipe_command)) # 输出示例:ls /tmp | grep log
方法2:利用命令对象的command属性拼接
如果你需要更灵活的处理,也可以直接访问命令对象的command属性,它会返回一个包含命令名和所有参数的列表,你可以自行拼接成字符串:
import sh ls_command = sh.ls("-l", "/tmp") # 获取命令列表(包含命令名和参数) cmd_list = ls_command.command # 拼接成完整命令字符串 cmd_str = ' '.join(cmd_list) print(cmd_str) # 输出示例:ls -l /tmp
小提示
- 当你指定
_shell=True让命令通过Shell执行时,上述方法依然有效,生成的字符串就是会被Shell解析的完整命令。 - sh模块默认是直接执行子进程而不经过Shell,这时候生成的命令字符串是等效的Shell命令,方便你快速验证参数是否正确。
内容的提问来源于stack exchange,提问作者arod
相关产品推荐
相关产品推荐

