2016-02-27 36 views
1

我编写了Python代码来以编程方式计算IP,然后我想在外部连接程序中使用它。在子流程中使用字符串

我不知道如何将它传递给子:

import subprocess 
from subprocess import call 

some_ip = "192.0.2.0" # Actually the result of some computation, 
         # so I can't just paste it into the call below. 

subprocess.call("given.exe -connect host (some_ip)::5631 -Password") 

我读过我能发现类似的问题,但我真的不明白这一步,在使用的some_ip值子进程。如果有人能向我解释这一点,将不胜感激。

+0

我编辑了这个问题和我的答案。由于我以前的评论已经过时,我已经删除了它们。随意删除您的评论。 (他们可能会在没有上下文的情况下引起混淆。) –

回答

1

如果你不shell=True使用它(我不建议shell=True除非你真的知道你在做什么,因为shell模式可以带来安全隐患)subprocess.call取指令作为序列(例如list )的组件:首先是可执行文件的名称,然后是要传递给它的参数。所有这些应该是字符串,但不管它们是字符串文字,持有字符串的变量或调用返回字符串的函数都无关紧要。

因此,下面应该工作:

import subprocess 

some_ip = "192.0.2.0" # Actually the result of some computation. 

subprocess.call(
    ["given.exe", "-connect", "host", "{}::5631".format(some_ip), "-Password"]) 
  • 我使用str's format methodsome_ip字符串替换{}占位符"{}::5631"
  • 如果你调用它作为subprocess.call(...),然后

    import subprocess 
    

    是充分,

    from subprocess import call 
    

    是不必要的。如果你想调用函数,只需要call(...)即可。在这种情况下,以前的进口不需要。

+0

它的工作原理!非常感谢你! –

+0

我可能说得太快了,我尝试了工作中的代码(访问VPN),并且我一直无法为密码做同样的事情,如果我把它放在IP之前,它就不会被使用,并且在它之后用作主机。我注意到上次你发布了一些关于密码的内容,但是这些评论被删除了。你会如此善意帮助我解决这个问题吗?先谢谢你。 –

相关问题