os.system() 在 Ubuntu 中与 "strings" 命令一起使用时不起作用
os.system() when used with "strings" command in Ubuntu not working
考虑这个命令
strings --radix=d --encoding={b,l} abc.exe >> xyz.txt
当我在 Ubuntu 终端上 运行 时,它可以正常工作。
但是,当我通过 python 代码使用它时:
import os
os.system("strings --radix=d --encoding={b,l} abc.exe >> xyz.txt")
它不工作。
如果我删除 "encoding" 那么它在这两种情况下都可以正常工作。
但是,我需要获取 Unicode 字符串,以便该部分是必需的。
谁有解决办法?
os.system 已过时,请改用子流程。你也应该使用 shell=True
来获得类似 sh 的行为:
import subprocess
cmd = "strings --radix=d --encoding={b,l} abc.exe >> xyz.txt"
subprocess.check_call(cmd, shell=True)
调用失败也会抛异常!
ubuntu 默认使用短划线作为 /bin/sh,bash 用于登录 shells.
因此在您的终端中 --encoding={b,l}
可能会被 bash 扩展为 --encoding=b --encoding=l
,而破折号(可能被 os.system 称为 /bin/sh)不会这样的扩展,它仍然是 --encoding={b,l}
最简单的方法是显式扩展编码参数,不要将其留给 shell,然后它将与任何 shell.
一起使用
并且您应该使用 subprocess
模块而不是 os.system()
。请注意,当使用 shell=True
参数时,它还会调用默认的 /bin/sh
,但不能保证是 bash.
您不需要 shell=True
,您可以传递一个参数列表并将 stdout
写入文件:
from subprocess import check_call
with open('xyz.txt',"a") as out:
check_call(['strings', '--radix=d', '--encoding={b,l}', 'abc.exe'],stdout=out)
很好地解释了 here shell=True
的作用
考虑这个命令
strings --radix=d --encoding={b,l} abc.exe >> xyz.txt
当我在 Ubuntu 终端上 运行 时,它可以正常工作。 但是,当我通过 python 代码使用它时:
import os
os.system("strings --radix=d --encoding={b,l} abc.exe >> xyz.txt")
它不工作。 如果我删除 "encoding" 那么它在这两种情况下都可以正常工作。 但是,我需要获取 Unicode 字符串,以便该部分是必需的。 谁有解决办法?
os.system 已过时,请改用子流程。你也应该使用 shell=True
来获得类似 sh 的行为:
import subprocess
cmd = "strings --radix=d --encoding={b,l} abc.exe >> xyz.txt"
subprocess.check_call(cmd, shell=True)
调用失败也会抛异常!
ubuntu 默认使用短划线作为 /bin/sh,bash 用于登录 shells.
因此在您的终端中 --encoding={b,l}
可能会被 bash 扩展为 --encoding=b --encoding=l
,而破折号(可能被 os.system 称为 /bin/sh)不会这样的扩展,它仍然是 --encoding={b,l}
最简单的方法是显式扩展编码参数,不要将其留给 shell,然后它将与任何 shell.
一起使用并且您应该使用 subprocess
模块而不是 os.system()
。请注意,当使用 shell=True
参数时,它还会调用默认的 /bin/sh
,但不能保证是 bash.
您不需要 shell=True
,您可以传递一个参数列表并将 stdout
写入文件:
from subprocess import check_call
with open('xyz.txt',"a") as out:
check_call(['strings', '--radix=d', '--encoding={b,l}', 'abc.exe'],stdout=out)
很好地解释了 here shell=True
的作用