Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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 在MacOs中调用邮件实用程序时,在链接中转义符号时出现问题_Python_Python 3.x_Macos_Subprocess_Escaping - Fatal编程技术网

Python 在MacOs中调用邮件实用程序时,在链接中转义符号时出现问题

Python 在MacOs中调用邮件实用程序时,在链接中转义符号时出现问题,python,python-3.x,macos,subprocess,escaping,Python,Python 3.x,Macos,Subprocess,Escaping,因此,我有一些用Python编写的自动化代码,用于填充电子邮件模板字符串,其中一个是指向包含字符&的Splunk查询的链接。填充电子邮件后,我将使用传入的参数创建cmdline以调用子流程库,如下所示: pipe = subprocess.Popen(cmdline, stdin=inout, stdout=inout, stderr=inout, close_fds=closefds,

因此,我有一些用Python编写的自动化代码,用于填充电子邮件模板字符串,其中一个是指向包含字符&的Splunk查询的链接。填充电子邮件后,我将使用传入的参数创建cmdline以调用子流程库,如下所示:

pipe = subprocess.Popen(cmdline, stdin=inout, stdout=inout,
                                stderr=inout, close_fds=closefds,
                                preexec_fn=setsid, startupinfo=startupinfo)
现在,cmdline是一个包含以下内容的列表:

['open', "mailto:comman_separated_emails?cc=dummy_email@gmail.com&subject=My subject&body=Some 
text with the following problem link: 
https://splunk-link.com:443/app/my_app/@go?dispatch_view=alert&s=%2FservicesNS%2Fnobody%2Fapigateway-prod%2Fsaved%2Fsearches%2FAPI%2520Gateway%2520Credential%2520Security%2520Violation%253A%2520Auth%2520Header%2520on%2520HTTP%2520%2528Non%2520SSL%2529%2520-%2520Daily"]
每次打开我的默认邮件提供程序时(在本例中为Outlook),邮件都会在链接中的&处被截断

我试着用双引号和单引号将链接括起来,用\&\和^&转义,但仍然没有成功

有人能帮我吗?先谢谢你

-Brian是URL中参数之间的分隔符。您需要将其编码为%26

您可以使用urllib.parse.quote对所有需要编码的字符进行编码

quoted_link = urllib.parse.quote('https://splunk-link.com:443/app/my_app/@go?dispatch_view=alert&s=%2FservicesNS%2Fnobody%2Fapigateway-prod%2Fsaved%2Fsearches%2FAPI%2520Gateway%2520Credential%2520Security%2520Violation%253A%2520Auth%2520Header%2520on%2520HTTP%2520%2528Non%2520SSL%2529%2520-%2520Daily')
cmdline = ["open", f"""mailto:comman_separated_emails?cc=dummy_email@gmail.com&subject=My subject&body=Some 
text with the following problem link: 
{quoted_link}"""]

嗨,巴尔马。谢谢你的帮助!我现在可以将完整字符串传递到一个新的电子邮件弹出窗口,但当我单击链接时,它不起作用,因为缺少符号:urllib.parse.quotealert_location,safe='/:?=@%'。我将%26替换为&并且链接可以工作。你知道如何解决这个问题吗?确保你只引用了嵌入的链接,而不是整个URL。我已经更新了答案。这就是我所做的:“警报位置”:urllib.parse.quotealert\u位置,safe='/:?=@%'然后body=EMAIL\u模板。格式**上下文。浏览器不喜欢%26,因为当我单击它时,它会断开链接。上下文只是填写电子邮件模板中所有信息的dict。这是编码无效的url:https%3A//ip.scheduled.splunk.com%3A443/app/myapp/%40go%3Fdispatch_view%3Dalert%26s%3D%252fservicens%252Fnobody%252Fsaved%252Fsearches%252FAPI%252520Gateway%252520Credential%252520Security%252520Violation%25253A%252520Auth%252520Header%252520on%252520on%252520HTTP%252520%252520%252528Non%252520SSL%252520SSL%252529%252520-%252520Daily可能是问题您已经在该URL中编码了其他字符。您应该让urllib.parse.quote执行所有编码。