如何在python中传递星号到模块“sh”?

我在Python中使用“sh”模块来调用Linux上的外部命令。 在我的具体情况下,我想称之为“du”命令,因为它比“手动”更有效。 不幸的是,下面的行不起作用:

output = sh.du('-sx', '/tmp/*') 

但是这确实有效:

 output = sh.du('-sx', '/tmp/') 

如果我传递一个星号,我得到以下错误信息:

 'ascii' codec can't encode character u'\u2018' in position 87: ordinal not in range(128) 

有谁知道如何处理命令行参数中的星号?


根据要求,这里是堆栈跟踪:

 Traceback (most recent call last): File "./unittest.py", line 33, in <module> output = sh.du('-sx', '/tmp/*') File "/usr/local/lib/python2.7/dist-packages/sh.py", line 1021, in __call__ return RunningCommand(cmd, call_args, stdin, stdout, stderr) File "/usr/local/lib/python2.7/dist-packages/sh.py", line 486, in __init__ self.wait() File "/usr/local/lib/python2.7/dist-packages/sh.py", line 500, in wait self.handle_command_exit_code(exit_code) File "/usr/local/lib/python2.7/dist-packages/sh.py", line 516, in handle_command_exit_code raise exc(self.ran, self.process.stdout, self.process.stderr) sh.ErrorReturnCode_1 

Solutions Collecting From Web of "如何在python中传递星号到模块“sh”?"

答案是:

我忘记了星号处理是由bash本身完成的,而不是由“du”完成的。 这意味着:“sh”确实表现得正确,正如人们所期望的那样。 它将“/ tmp / *”直接传递给“du”(但bash不)。 这就是Padraic Cunningham试图告诉我的。

因此,唯一正确的方法来做我想要做的是用户rmn描述的方式:

 sh.du('-sx', sh.glob('/tmp/*')) 

而这正是bash shell本身在调用“du”时所做的。

使用sh.glob

 sh.du('-sx', sh.glob('/tmp/*'))