当前位置: 首页 > 面试题库 >

如何避免shell = True在子过程中

万高轩
2023-03-14
问题内容

我有子过程命令将md5校验和检查为

subprocess.check_output('md5 Downloads/test.txt', stderr=subprocess.STDOUT, shell=True)

它工作正常。但是我读了尽量避免shell=True 但是当我跑步

subprocess.check_output('md5 Downloads/test.txt', stderr=subprocess.STDOUT, shell=False)

我得到错误 OSError: [Errno 2] No such file or directory

我可以运行以上命令或解决方法shell=False还是可以保留shell=True


问题答案:

只需将参数传递check_output()列表即可

subprocess.check_output(["md5", "Downloads/test.txt"], stderr=subprocess.STDOUT)

从文档:

args
是所有调用所必需的,并且应为字符串或程序参数序列。通常最好提供一个参数序列,因为它允许模块处理任何必需的参数转义和引用(例如,允许在文件名中保留空格)。如果传递单个字符串,则必须是
shellTrue(请参见下文),否则该字符串必须简单地命名要执行的程序而无需指定任何参数。



 类似资料:
  • 问题内容: 我正在使用以下命令启动子流程: 但是,当我尝试杀死使用: 要么 该命令一直在后台运行,所以我想知道如何才能真正终止该过程。 请注意,当我使用以下命令运行命令时: 发出时,它确实成功终止。 问题答案: 使用进程组,以便能够向组中的所有进程发送信号。为此,您应该将会话ID附加到生成的子进程的父进程中,在您的情况下这是一个外壳程序。这将使其成为流程的组长。因此,现在,当信号发送到流程组负责人

  • hyperf 本地开发使用 php bin/hyperf.php server:watch 命令启动。 CTRL + C 停止后有残留进程。 如果再次执行启动命令就会显示端口被占用。 查不到合适的办法。

  • 问题内容: 我正在尝试通过从客户端向服务器发送密钥和随机数来认证用户。 我的代码未向我显示客户端的响应。执行下面的代码时,我得到了一个空指针异常。 问题答案: 解决大多数问题的固定步骤: 阅读堆栈跟踪以确定哪一行代码引发NPE 在该行代码处设置一个断点 使用调试器,在遇到断点时,确定该行中的对象引用是 弄清楚为什么引用该文件(到目前为止,这是唯一实际的困难部分) 解决根本原因(也可能很困难)

  • 问题内容: 我有两个简单的Java代码。第一个将恒定功率定义为power = a.pow(b); 第二个将恒定功率定义为power = BigInteger.ONE.shiftLeft(b) 在命令行中设置内存标志- Xmx1024m,第一个代码可以正常工作,但是第二个代码却出现错误:java.lang.OutOfMemoryError:Java堆空间 我的问题:我应该在第二个代码中更改什么以避免

  • 问题内容: 我有一个用于将文本添加到现有.doc文件中的代码,它将通过使用apache POI将其另存为另一个名称。 以下是到目前为止我尝试过的代码 以下是我得到的 我已经添加了与此对应的所有jar文件,但仍然找不到解决方案。我对apache poi是陌生的,所以请帮我提供一些解释和示例。谢谢 问题答案: 从我对问题的评论中复制: 看起来您需要Apache POI发行版中的poi-ooxml-sc

  • 我有一个关于科特林的问题: 在kotlin中是否可以用内联和具体化避免这种每个图形类型都有一个接口的方法爆炸?我在努力,但我做不到。 一方面,kotlin接口(我认为)不允许内联函数,另一方面,即使没有该接口,我也不能自动强制转换参数T,将其具体化为工厂类中的特定子类型类之一。