我正在编写一个脚本,在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
)
:
\
我的代码中有什么错误。请帮助。
答案 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