【问题标题】:Linux ignore the quotes from a command launched in my python script [duplicate]Linux忽略在我的python脚本中启动的命令的引号[重复]
【发布时间】:2021-05-20 11:04:51
【问题描述】:

我正在尝试使用子进程从我的 python 脚本中执行以下命令:

date -s "25 DEC 2021 15:30:00"

这就是我执行命令的方式:

command_date = ("/usr/bin/date -s \"{0}\"".format(config_date))
print("command date : ",command_date)

proc = subprocess.Popen(command_date.split(), stdout = subprocess.PIPE, encoding = "utf8")
result_date = proc.stdout.read()
print("\nNew system date : ", result_date)

但我收到以下错误:

/usr/bin/date: extra operand '2021'

在终端直接进行一些测试后,如果我使用的命令不带日期字符串的引号,则会出现错误。但我的变量 command_date 构造良好(见打印:/usr/bin/date -s "25 DEC 2021 15:30:00"

你知道为什么我的引号被忽略以及如何解决吗?

【问题讨论】:

  • 使用列表而不是格式化字符串来传递参数stackoverflow.com/questions/14928860/…
  • @lllrnr101 如果您认为这个问题在本网站的其他地方有答案 - flag it as duplicate 而不是发布链接作为评论...
  • 尝试打印command_date.split()并查看问题...
  • @Tomerikoo 这就是我得到的:['/usr/bin/date', '-s', '"25', 'DEC', '2021', '15:30:00"']。我明白为什么它现在不起作用了,谢谢

标签: python


【解决方案1】:

问题来自于对字符串调用split,它将空格处的字符串拆分为日期的单独参数。尝试自己构建命令 + 参数列表:

command = ["/usr/bin/date", "-s", "{0}".format(config_date)]
proc = subprocess.Popen(command, stdout = subprocess.PIPE, encoding = "utf8")
result_date = proc.stdout.read()
print("\nNew system date : ", result_date)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2019-08-04
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多