Python 获得'\n';(默认情况下为新行)在子流程调用期间)日期格式为什么?

Python 获得'\n';(默认情况下为新行)在子流程调用期间)日期格式为什么?,python,Python,这是痕迹 IOError: [Errno 2] No such file or directory: 'security01/30/15,15:32:58\n.jpg' #how and why \n come here? 对于这些行: p = subprocess.Popen(['date +%m/%d/%y,%H:%M:%S'] stdout=subprocess.PIPE,shell=True) 使用的附加行: (output, err) = p.communicate()

这是痕迹

IOError: [Errno 2] No such file or directory: 'security01/30/15,15:32:58\n.jpg' 
#how and why \n come here?
对于这些行:

p = subprocess.Popen(['date +%m/%d/%y,%H:%M:%S']
stdout=subprocess.PIPE,shell=True)
使用的附加行:

(output, err) = p.communicate()
    args = ['fswebcam','--no-banner','-r',' 960x720','filename' +       str(output) + '.jpg']
    subprocess.call(args)
另一行:

mail('mail@mail.com',
   'subject',
   'body',
   'filename' + str(output)  + '.jpg')

date
在其输出的末尾返回一个换行符,因此需要使用
strip()
方法来消除它

p = subprocess.Popen(['date +%m/%d/%y,%H:%M:%S'], stdout=subprocess.PIPE, shell=True)
stdout = p.communicate()[0].strip()
但是,如果您希望在文件名中添加日期/时间戳,最好直接在Python中使用和函数:

from datetime import datetime
print datetime.now().strftime('%m/%d/%y,%H:%M:%S')
>>> '01/30/15,10:47:37'

date
命令,以及用于交互式命令行的所有其他命令,都会以换行符终止其输出

如果这不是您所需要的,那么从子流程调用的输出中修剪最后的换行是一件非常常见的事情(在shell中,使用
`backticks`
和现代
$(命令)
语法硬编码的默认流程替换行为)

但是您不需要子流程来创建日期字符串——Python在其标准库(即开箱即用)中对此提供了广泛(尽管有点笨拙)的支持。见例

或者,改编成您的第一个示例片段

args = ['fswebcam','--no-banner','-r',' 960x720',
    time.strftime('filename%Y.%m.%d_%H.%M.%S.jpg')]
因为斜杠和冒号(在较小程度上,但仍然是)在文件名中都是有问题的字符,所以我将它们替换为点。出于纯粹的美学原因,我还将逗号改为下划线(值得怀疑;下划线也很难看)

我还将生成的文件名切换为使用标准的日期戳命名约定,首先使用完整的数字年份,以便文件列表和全局循环以正确的日期顺序生成文件


可能代码应该进一步调整,以便在文件名中包含正确的日期;然后,如果您想单独解析和重新格式化它以供人类使用,您可以自由地这样做。但是,如果标准格式既可以被现有代码读写,也可以被人类明确理解,请避免使用自定义日期格式。

您能显示代码的其余部分吗?发布您的实际代码,此处缺少逗号。如果您使用的是
shell=True
,则只需传递一个字符串,而不是列表中的字符串。您可以使用strip()删除\n,但出现另一个错误。打开文件以进行输出时出错:filename01/30/15,16:10:32.jpg,谢谢您的帮助。除非有目录,否则文件名中不能有斜杠,因此,
filename01
包含一个子目录
30
,您想在其中创建一个名为
15,15:10:32.jpg的文件。感谢您的帮助,上述方法解决了换行的问题,但fswebcam无法将图像写入本地磁盘/SD卡。所以邮件附件给出了错误。我认为在这个问题的上下文中,其他问题是无法解决的。请随意发布一个新问题,可能会有一个新的、有针对性的新问题描述(但请随意链接到此问题作为背景),并可能将此答案标记为已接受。成功了,是文件名。谢谢你的帮助
import time
filename = time.strftime('security%Y.%m.%d_%H.%M.%S.jpg')
args = ['fswebcam','--no-banner','-r',' 960x720',
    time.strftime('filename%Y.%m.%d_%H.%M.%S.jpg')]