python - 在subprocess.check_output中使用反斜杠

时间:2017-09-18 17:41:51

标签: python ubuntu

我正在编写一个脚本,在Ubuntu操作系统中使用Python连接到我的wifi。以下是我的代码:

[System.Web.Mvc.Route("Task/{projectid:int}")]
public async Task<ActionResult> Index(int projectid)
{
     return View(new SomeViewModel { ProjectId =  projectid});
}
[System.Web.Mvc.HttpPost]
public async Task<JsonResult> UpdateSigneeRequest(IndexVm task)
{
    return Json("OK", JsonRequestBehavior.AllowGet);
}

但由于from subprocess import check_output network = 'abcnetwork' password = r'Pass|\|ew2017;' output = check_output( ['nmcli d wifi connect {network} password {password}'.format( network=network, password=password)], shell=True )

,我收到错误
\

我的代码中有什么错误。请帮助。

3 个答案:

答案 0 :(得分:3)

将命令作为单词列表传递,而不是单个字符串(shell=False,这是默认值)。

output = check_output(['nmcli', 'd', 'wifi', 'connect', network, 'password', password])

答案 1 :(得分:1)

不要使用shell=True来依赖shell分词。而是将参数列表传递给check_output

output = check_output([
    'nmcli', 'd', 'wifi', 'connect', network, 'password', password
])

这样您也不需要使用额外的引号。

official documentation中建议使用shell=True

答案 2 :(得分:0)

只需将"添加到变量中,因此shell不会将反斜杠视为换行符。像

这样的东西
'nmcli d wifi connect "{network}" password "{password}"'

在您的示例中,您命令等于:

nmcli d wifi connect abcnetwork password Pass|\
|ew2017;

如果将其复制粘贴到终端中 - 您将获得与子流程显示完全相同的输出(除了python traceback):

/bin/sh: 1: |ew2017: not found