如何将Python变量发送到shell命令?
我试图将Python代码中的变量发送到Ubuntu中的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'是您想
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也许我不应该有一天晚上喝那么多酒,玩命令行俄罗斯轮盘赌。。。