在参数中运行带引号的命令适用于commands.getoutput(),但不适用于子进程模块

2024-01-28

我正在创建一个 python 程序,它调用许多其他程序和脚本(在 Unix(SUNos) + Linux 上)。除了 1 个脚本之外,我在所有地方都使用子进程。

我不使用子进程的脚本是一个 perl 脚本,它已被制作成可执行文件。不知何故,它不允许我使用子进程,但它可以与(已弃用的)命令包一起使用。 我想了解为什么它不适用于子流程(换句话说:我做错了什么;-))

(实际的 perl 命令是什么并不重要,但它返回用户的全名和电子邮件作为结果)

我尝试过的:

PERL_CMD = [ '<executable perl-script>', '-rt', '"users"', '-eq', '"name"' '"<user_name>", '-fs', '":"', '-fld', '"fullname"', '"email"' ]
full_name, email = subprocess.check_output( PERL_CMD ).split(':')

但这是行不通的。

命令变体起作用的地方:

PERL_CMD = '<executable perl-script> -rt "users" -eq "name" "<user_name>" -fs ":" -fld "full_name" "email"'
full_name, email = commands.getoutput( PERL_CMD ).split(':')

有人知道为什么我无法让子流程工作吗?

令我烦恼的是,我可以让它适用于除此之外的所有事情(尽管我有一个可接受的(但已弃用的)解决方法)。


您在中使用语法引号commands.getoutput()案例,以及文字引号subprocess.check_output()案件。没有shell=True(你不应该使用),没有 shell 将引号解析为语法,因此除了作为语法的引号之外,不存在语法引号之类的东西Python 本身.

所以,只需取出"您注入参数中的内容:

# this contains quotes that are syntactic to Python only, and no literal quotes
perl_cmd = [
  '<executable perl-script>',
  '-rt', 'users',
  '-eq', 'name', '<user_name>',
  '-fs', ':',
  '-fld', 'fullname', 'email' ]

更详细地解释一下——

当你通过时"name"对于 shell 作为命令的一部分,引号是被壳本身消耗在其解析过程中,不作为参数传递给命令。因此,当你跑步时sh -c 'echo "hello"',这通过了完全相同的论点 to echo as sh -c 'echo hello'; the echo命令甚至无法区分两次调用之间的区别!

当你通过时'"hello"'作为一个论点subprocess.Popen(),相比之下,外部引号由 Python 使用,内部引号是作为文字传递给内部命令。这使得它相当于sh -c 'echo "\"hello\""'(同样将文字引号传递给echo), not sh -c 'echo "hello"'(事实并非如此)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在参数中运行带引号的命令适用于commands.getoutput(),但不适用于子进程模块 的相关文章

  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • Python - 为什么这段代码被视为生成器?

    我有一个名为 mb 的列表 其格式为 Company Name Rep Mth 1 Calls Mth 1 Inv Totals Mth 1 Inv Vol Mth 2 等等 在下面的代码中 我只是添加了一个包含 38 个 0 的新列表 这
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 如何通过 Python socket.send() 发送字符串以外的任何内容

    我对 Python 编程非常陌生 但出于必要 我必须快速地将一些东西组合在一起 我正在尝试通过 UDP 发送一些数据 除了当我执行 socket send 时 我必须以字符串形式输入数据之外 一切都正常 这是我的程序 这样你就可以看到我在做
  • 使用 Pandas 查找自滚动高点以来的周期数

    我在 Pandas 中使用rolling max函数 http pandas pydata org pandas docs stable computation html moving rolling statistics moments
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • 获取 zeep.exceptions.ValidationError:缺少与 suds 一起使用的方法的元素

    我正在移植开发的代码suds 0 6到zeep 2 4 0 以前的泡沫代码 client Client WSDLfile proxy proxy faults True config client factory create perUse
  • 如何在 Numpy 中实现垃圾收集

    我有一个名为main py 它引用另一个文件Optimisers py它仅具有功能并用于for循环进入main py 这些函数都有不同的优化功能 This Optimisers py然后引用另外两个类似的文件 其中也只有函数 它们位于whi
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • pandas apply:函数名是否带引号的区别

    简单数据框定义示例 df pd DataFrame A 2 4 1 B 8 4 1 C 6 2 7 df A B C 0 2 8 6 1 4 4 2 2 1 1 7 尝试理解以下块中函数参数调用的差异 df apply sum df app
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 带有整数的 np.sqrt 和 where 条件返回错误结果

    当我将 numpy sqrt 方法应用于带有 a 的整数数组时 我得到了奇怪的结果where健康 状况 见下文 对于整数 a np array 1 4 9 np sqrt a where a gt 5 Out 3 array 0 0 5 3
  • 如何在 Python 中解析损坏的 XML?

    我无法影响的服务器发送的 XML 非常损坏 具体来说 Unicode WHITE STAR 将被编码为 UTF 8 E2 98 86 然后使用 Latin 1 转换为 HTML 实体表 我得到的是 acirc 98 86 9 个字节 位于声
  • 升级后 pip 损坏

    我做了 pip install U easyinstall 然后 pip install U pip 来升级我的 pip 但是 当我尝试使用 pip 时 我现在收到此错误 root d8fb98fc3a66 which pip usr lo
  • 在 Gensim 中通过 ID 检索文档的字符串版本

    我正在使用 Gensim 进行一些主题建模 并且已经达到使用 LSI 和 tf idf 模型进行相似性查询的程度 我取回 ID 集和相似点 例如 299501 0 64505910873413086 如何获取与 ID 在本例中为 29950
  • 在没有numpy的情况下在python中分配变量NaN

    大多数语言都有一个 NaN 常量 您可以使用它为变量分配值 NaN python 可以在不使用 numpy 的情况下做到这一点吗 是的 使用math nan https docs python org 3 library math html
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac
  • 获取长度为 n 的所有(n-选择-k)组合

    我怎样才能获得长度的所有组合 按顺序 n从数字列表中 例如 给定列表 1 2 3 4 并设置n 3 我怎样才能得到这些结果 1 2 3 1 2 4 1 3 4 2 3 4 For combinations of all possible l

随机推荐

  • 实体框架可以处理存储过程中的多个结果集(每个结果集来自连接表)吗?

    在 Linq to SQL 中 我找不到一种简单的方法来处理存储过程返回的多个结果集 其中每个结果集都来自表连接 每个结果集并不直接映射到表 无法改变这种行为 目前看来 使用 DataSet 似乎要简单得多 当前的实体框架或即将推出的实体框
  • 密封案例类是一个好习惯吗?

    密封类的主要原因似乎是 这允许编译器在这些类上进行模式匹配时进行穷举搜索 假设我有用于模式匹配的数据类型 玩具示例 sealed trait Statement case class Assign name String value Int
  • withFormik,将函数作为 props 传递

    我正在使用 Formik 构建用户输入表单 我正在使用 withFormik 来处理我的表单 我目前正在我的组件中传递我的handleSubmit 如下所示 export const CreateForm withFormik mapPro
  • 使用请求范围的 bean 函数作为 JSF 中临时呈现按钮的操作

    我在 JSF 中遇到以下基本 也许是愚蠢的 理解问题 有一个 JSF 页面 testPage xhtml
  • Django 启动时只执行一次代码?

    我正在编写一个 Django 中间件类 我只想在启动时执行一次 以初始化一些其他任意代码 我遵循了 sdolan 发布的非常好的解决方案here https stackoverflow com questions 3495964 in dj
  • 如何使用 Jquery 选择表行?

    我试图使用 JQuery 选择表行 但似乎不会触发 selected 事件 我已将代码放在 JSFiddle 上 http jsfiddle net tonymaloney1971 3tevxmps 1 http jsfiddle net
  • CIColor 到 UIColor -> 未为 UIColor UIExtendedSRGBColorSpace 定义 CIColor

    我正在尝试从 rgb hex 色彩空间实现 CIColor 如下所示 let bottomColor UIColor init red 235 255 green 250 255 blue 255 255 alpha 1 0 ciColor
  • 为什么 OrderedDict 不使用 super ?

    我们可以创建一个OrderedCounter简单地通过使用多重继承 gt gt gt from collections import Counter OrderedDict gt gt gt class OrderedCounter Cou
  • Rails 中两个表具有相同的数据?

    我正在尝试在我的视图中创建一个表并在某些条件下填充它 我有两个表 里面都有两列 一列称为event url另一个是gmiurl 里面有gmiurl的表叫做GMITable另一个叫做newevent 基本上我想展示里面的一切GMITable除
  • 设置 selectonemenu 的默认值

    我有一个像这样的选择菜单
  • APC 显示 100% 碎片

    APC http php net manual en book apc php显示 100 碎片 这很糟糕吗 这是否意味着它根本没有帮助 我应该采取哪些途径来改善情况 提前致谢 根据我的经验 是的 我的系统中 APC 显示 100 碎片 并
  • 按下 tkinter 按钮时如何播放声音?

    我正在为 Windows PC 构建一个程序 其中包含很多按钮并且看起来非常简单 所以我想知道 当你按下按钮 使用 tkinter 时 我可以播放声音来让程序活跃一点吗 请记住我正在学习 所以请简单一点 假设您的文件是 WAV from t
  • 实体类型没有定义键

    另一个 实体类型 x 没有定义键 问题 但我已经设置了 Key 属性上的属性所以我有点困惑 这是我的实体和上下文类 namespace DoctorDB Models public class Doctor Key public strin
  • gzip 无法在 Django 中使用 Whitenoise 工作

    我在 Heroku 上部署了一个 Django 网站 使用 Whitenoise 提供静态文件 静态文件工作正常 但根据我用来测试它的各种网站 包括谷歌工具 Gzip 无法工作 这是我的生产设置文件中的代码 DATABASES defaul
  • iPhone:通过蓝牙序列化和发送对象?

    序列化对象并通过蓝牙 或网络连接 发送它的最佳方法是什么 你可以使用gamekit http developer apple com library ios documentation NetworkingInternet Conceptu
  • 绘制从远程服务器下载的图像

    我需要执行以下操作 从服务器下载 PNG 资源 根据状态在该图像上绘制几个具有不同颜色的矩形 在可缩放图像视图中显示该图像 我在使用 Canvas 的 Android 应用程序中有一个工作代码 但我不知道如何使用 Flutter 来做到这一
  • Java中如何让程序等待按钮按下

    现在 我不确定这是否可能 甚至是完成我想要做的事情的最佳方法 但基本上我正在使用一个非常简单的 Swing GUI 创建一个非常简单的模拟程序 每轮模拟结束后 界面上的一些按钮都会启用 供用户进行更改 然后用户可以按 继续 按钮再次开始模拟
  • JPA 继承 - 更改实体类型

    我有两节课 Entity Inheritance strategy InheritanceType SINGLE TABLE DiscriminatorColumn name PERSONTYPE DiscriminatorValue va
  • 草皮遮罩返回没有洞的多边形

    我得到一些奇怪的结果草皮 mask https turfjs org docs mask 这是polygon我正在尝试运行mask 功能 https gist githubusercontent com Stophface 50155878
  • 在参数中运行带引号的命令适用于commands.getoutput(),但不适用于子进程模块

    我正在创建一个 python 程序 它调用许多其他程序和脚本 在 Unix SUNos Linux 上 除了 1 个脚本之外 我在所有地方都使用子进程 我不使用子进程的脚本是一个 perl 脚本 它已被制作成可执行文件 不知何故 它不允许我