Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Python变量发送到shell命令?_Python_Bash_Shell - Fatal编程技术网

如何将Python变量发送到shell命令?

如何将Python变量发送到shell命令?,python,bash,shell,Python,Bash,Shell,我试图将Python代码中的变量发送到Ubuntu中的shell命令。有人能帮我怎么做吗?目前,我有 import os s=5 command = os.popen('stress -c 5 -i 1 -m 1 --vm-bytes 128M -t s') 我想将s变量发送到此命令,而不是直接说出超时时间 这是一个字符串替换操作,您可以获取所有信息 或者您可以将字符串连接在一起。()这是一个字符串替换操作,您可以获取所有信息 或者您可以将字符串连接在一起。()我假设命令字符串中的's'是您想

我试图将Python代码中的变量发送到Ubuntu中的shell命令。有人能帮我怎么做吗?目前,我有

import os
s=5
command = os.popen('stress -c 5 -i 1 -m 1 --vm-bytes 128M -t s')

我想将
s
变量发送到此命令,而不是直接说出超时时间

这是一个字符串替换操作,您可以获取所有信息


或者您可以将字符串连接在一起。()

这是一个字符串替换操作,您可以获取所有信息


或者您可以将字符串连接在一起。()

我假设命令字符串中的's'是您想要假设的变量's'的值?您需要做的就是:

command = os.popen('stress -c 5 -i 1 -m 1 --vm-bytes 128M -t ' + str(s))
如果我误读了它,而你试图替换5,它基本上是一样的

command = os.popen('stress -c ' + str(s) + ' -i 1 -m 1 --vm-bytes 128M -t s')

我假设您的命令字符串中的's'是您想要假定的变量's'的值?您需要做的就是:

command = os.popen('stress -c 5 -i 1 -m 1 --vm-bytes 128M -t ' + str(s))
如果我误读了它,而你试图替换5,它基本上是一样的

command = os.popen('stress -c ' + str(s) + ' -i 1 -m 1 --vm-bytes 128M -t s')

使用标准子流程模块:

import subprocess
s = 5
cmd = ['stress', '-c', '5', '-i', '1', '-m', '1',
      '--vm-bytes', '128M', '-t', str(s)]
subprocess.call(cmd)

使用子流程模块,允许单独且明确地传递每个参数。您只需将它们转换为字符串。

使用标准子流程模块:

import subprocess
s = 5
cmd = ['stress', '-c', '5', '-i', '1', '-m', '1',
      '--vm-bytes', '128M', '-t', str(s)]
subprocess.call(cmd)


使用子流程模块,允许单独且明确地传递每个参数。您只需将它们转换为字符串。

使用外部链接支持您的答案,不是整个答案本身。我相信答案是字符串替换,链接通过提供详细的操作方法来支持答案……如果您还不知道字符串替换操作是什么,那么在不咨询外部资源的情况下,无法使用此答案。在引用问题的情况下,这也不是一个好的答案。因此,只要我不做全部工作并给出所需的内容,你所说的答案就根本不是一个应该被接受的答案?我明白你的意思,我没有为链接提供足够的上下文,下次会这样:)。使用外部链接来支持你的答案,不是整个答案本身。我相信答案是字符串替换,链接通过提供详细的操作方法来支持答案……如果您还不知道字符串替换操作是什么,那么在不咨询外部资源的情况下,无法使用此答案。在引用问题的情况下,这也不是一个好的答案。因此,只要我不做全部工作并给出所需的内容,那么你所说的根本不是一个应该被接受的答案?我明白你的意思,我没有为链接提供足够的上下文,下次将执行:)。如果
s
本身的值包含双引号,则第一个方法将不起作用。第二种方法确实是唯一可靠的方法。当然,我也同意第二种方法更可靠。但是,在我的例子中,第一个方法是有效的。如果
s
本身的值包含双引号,那么第一个方法将不起作用。第二种方法确实是唯一可靠的方法。当然,我也同意第二种方法更可靠。然而,在我的例子中,第一种方法是有效的。虽然它会起作用,但这是一个坏习惯。命令行中包含的值应该正确转义,或者命令应该在Python端拆分为标记。如果
s
来自不受信任的来源,则可能是
;rm-rf/
@viraptor我同意转义,但看起来变量在OP的脚本中是一个常量,因此可以安全地执行快速版本。从技术上讲,
rm-rf/
不起作用(我已经测试过了),您需要
rm-rf/*
,因为rm不允许您删除root。即使这样,也有一些文件不允许你删除,但这将使操作系统几乎无法使用。我知道它不起作用-这就是为什么我总是在示例中使用损坏的版本:)@viraptor也许我不应该有一天晚上喝那么多酒,玩命令行俄罗斯轮盘赌……虽然它能起作用,但这是一个坏习惯。命令行中包含的值应该正确转义,或者命令应该在Python端拆分为标记。如果
s
来自不受信任的来源,则可能是
;rm-rf/
@viraptor我同意转义,但看起来变量在OP的脚本中是一个常量,因此可以安全地执行快速版本。从技术上讲,
rm-rf/
不起作用(我已经测试过了),您需要
rm-rf/*
,因为rm不允许您删除root。即使这样,也有一些文件不允许你删除,但这会使操作系统几乎无法使用。我知道它不起作用-这就是为什么我总是在示例中使用损坏的版本:)@viraptor也许我不应该有一天晚上喝那么多酒,玩命令行俄罗斯轮盘赌。。。