python - 将带空格的参数传递给 linux 服务

标签 python linux perl

我有一个接受参数的脚本,我希望它能够作为 linux 服务运行。 有一个从/etc/ini.t/deploy 到实际脚本的符号链接(symbolic link)。

如果我跑

/etc/init.d/deploy --machine NAME --message "Hello World"

一切正常,脚本接收到 4 个参数:

      '--machine',
      'NAME',
      '--message',
      'Hello World'

另一方面,如果我运行它

/sbin/service deploy  --machine NAME --message "Hello World"

然后脚本接收5个参数:

      '--machine',
      'NAME',
      '--message',
      'Hello',
      'World'

同样的情况在 Perl 和 Python 中都会发生,所以据我所知,它是在空间分割后传递参数的“服务”。我该怎么做才能使这项工作与直接调用时使用“服务”的方式相同?

最佳答案

这就是传递参数的问题。显然,在您的上下文中,有些东西不是逐字传递的,而是通过解释传递的,可以这么说。

您可以使用两次引用您的东西的解决方法:

/sbin/service deploy  --machine NAME --message '"Hello World"'

在许多情况下,这可以解决问题。

更通用的方法是使用现代 bashprintf "%q":

/sbin/service deploy  --machine NAME --message "$(printf "%q" "Hello World")"

这会生成给定字符串的引用版本。

关于python - 将带空格的参数传递给 linux 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808317/

相关文章:

perl - 哪一个 cpan 安装程序是正确的? (CPAN.pm/CPANPLUS/cpanminus)

python - 根据批量大小动态平铺张量

c++ - 从 sockaddr * 转换为 sockaddr_in * 增加了所需的对齐方式

c - 环回接口(interface)是否在网卡/硬件上产生中断

perl - 为什么 Perl 的 foreach 不要求用 my 声明它的变量?

perl - log4perl 一个记录器,带有两个附加程序和不同的日志级别

Python - Gtk.TreeView 和 Gtk.ListStore 获取选定的索引

python - 如何知道 python 脚本是否在 Windows 中以管理员权限运行?

python - 在 windows 7 中为 python 3.5 安装 pywin32

linux - Firefox 在Centos 6.7 那个节点上报错