相关疑难解决方法(0)

如何在python中从字符串变量创建原始字符串?

您可以通过以下方式从字符串创建原始字符串

test_file=open(r'c:\Python27\test.txt','r')
Run Code Online (Sandbox Code Playgroud)

如何从字符串变量创建原始变量,例如

path = 'c:\Python27\test.txt'

test_file=open(rpath,'r')
Run Code Online (Sandbox Code Playgroud)

因为我有一个文件路径:

file_path = "C:\Users\b_zz\Desktop\my_file"
Run Code Online (Sandbox Code Playgroud)

当我做:

data_list = open(os.path.expandvars(file_path),"r").readlines()
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    scheduled_data_list = open(os.path.expandvars(file_path),"r").readlines()
IOError: [Errno 22] invalid mode ('r') or filename: 'C:\\Users\x08_zz\\Desktop\\my_file'
Run Code Online (Sandbox Code Playgroud)

python string rawstring

9
推荐指数
2
解决办法
1万
查看次数

Snakemake:使用run指令时如何实现log指令?

logSnakemake 允许使用指定日志文件名称的参数为每个规则创建日志。将输出结果通过管道传输到此日志相对简单shell,但我无法找出记录输出输出的方法run(即 python 脚本)。

一种解决方法是将 python 代码保存在脚本中,然后从 shell 运行它,但我想知道是否还有另一种方法?

snakemake

6
推荐指数
1
解决办法
1788
查看次数

Python 日志记录 - 仅适用于自己导入的模块

在这里参考这个问题:LINK 如何设置一个配置,它只会记录我的根脚本和我自己的子脚本?链接的问题要求禁用所有导入的模块,但这不是我的意图。

我的根设置

import logging
from exchangehandler import send_mail
log_wp = logging.getLogger(__name__)

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(levelname)s [%(filename)s]: %(name)s %(funcName)20s - Message: %(message)s',
                    datefmt='%d.%m.%Y %H:%M:%S',
                    filename='C:/log/myapp.log',
                    filemode='a')

handler = logging.StreamHandler()
log_wp.addHandler(handler)

log_wp.debug('This is from root')

send_mail('address@eg.com', 'Request', 'Hi there')
Run Code Online (Sandbox Code Playgroud)

我的子模块 exchangehandler.py

import logging
log_wp = logging.getLogger(__name__)

def send_mail(mail_to,mail_subject,mail_body, mail_attachment=None):
log_wp.debug('Hey this is from exchangehandler.py!')
    m.send_and_save()
Run Code Online (Sandbox Code Playgroud)

我的应用程序日志

16.07.2018 10:27:40 - DEBUG [test_script.py]: __main__                   <module> - Message: This is from root
16.07.2018 10:28:02 - DEBUG [exchangehandler.py]: exchangehandler        send_mail - …
Run Code Online (Sandbox Code Playgroud)

python logging

5
推荐指数
1
解决办法
5446
查看次数

使用 Python 将 stdout 和 stderr 重定向到同一个文件

我想将 Python 脚本的标准错误和标准输出重定向到同一个输出文件。从我可以使用的终端

$ python myfile.py &> out.txt
Run Code Online (Sandbox Code Playgroud)

完成我想要的相同任务,但我需要从 Python 脚本本身完成它。

我调查了Redirect subprocess stderr to stdoutHow to redirect stderr in Python? 和示例 10.10 从这里开始,然后我尝试了以下操作:

import sys
fsock = open('out.txt', 'w')
sys.stdout = sys.stderr = fsock

print "a"
Run Code Online (Sandbox Code Playgroud)

它正确地在文件 out.txt 中打印了字母“a”;但是,当我尝试以下操作时:

import sys
fsock = open('out.txt', 'w')
sys.stdout = sys.stderr = fsock

print "a   # missing end quote, will give error
Run Code Online (Sandbox Code Playgroud)

我在终端上收到错误消息“SyntaxError ...”,但在文件 out.txt 中没有。我需要做什么才能将 SyntaxError 发送到文件 out.txt?我不想写异常,因为那样的话我必须在脚本中写太多异常。我正在使用 Python 2.7。

更新:正如下面的答案和评论中所指出的,SyntaxError 将始终输出到屏幕,我替换了该行

print "a   # missing …
Run Code Online (Sandbox Code Playgroud)

python stderr python-2.7

3
推荐指数
2
解决办法
1万
查看次数

如何在Python中重定向stderr?通过Python C API?

这是我最近两个问题的组合:
[1] C中的Python实例方法
[2] 如何在Python中重定向stderr?

我想从python脚本中记录stdout和stderr的输出.

我想问的是,根据[1]创建一个新类型似乎相当复杂.如果不需要将新类型公开给Python,它是否简化了事情,即它只存在于C中?

我的意思是,当Python打印出来时会转到"Objects/fileobject.c",而在"PyFile_WriteObject"中它会检查是否可以写入其参数:

writer = PyObject_GetAttrString(f, "write");
if (writer == NULL)
...
Run Code Online (Sandbox Code Playgroud)

此外,有可能像这样得到stdout和stderr:

PyObject* out = PySys_GetObject("stdout");
PyObject* err = PySys_GetObject("stderr");
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有可能构造必要的PyObject,它满足上面的'PyObject_GetAttrString(f,"write")'并且可以调用,所以我可以写:

PySys_SetObject("stdout", <my writer object / class / type / ?>);
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/c-api/sys.html?highlight=pysys_setobject#PySys_SetObject

这样,就没有必要将新的"writer类型"暴露给Python脚本的其余部分,所以我认为编写代码可能有点简单......?

c python stdout python-c-api io-redirection

2
推荐指数
2
解决办法
3080
查看次数

python和unicode stderr

我使用匿名管道来捕获所有stdout,然后stderr打印成一个richedit,当我使用wsprintf时它没关系,但使用多字节char的python真的让我恼火.如何将所有这些输出转换为unicode?

更新2010-01-03:

谢谢你的回复,但它似乎str.encode()唯一适用的print xxx东西,如果在期间有错误py_runxxx(),我的重定向stderr将捕获多字节字符串中的错误消息,所以有没有办法可以使python以unicode方式输出它的消息?在这篇文章中似乎有一个可用的解决方案.

我稍后再试.

python unicode stderr

2
推荐指数
1
解决办法
2394
查看次数

使 Python 记录器记录所有 stdout 和 stderr 消息

使用 python logging 包,并编写一个类 Log,我想将 stdout 和 stderr 发送到日志文件:

log = Log("log.txt")
print "line1"
print "line2"
print >>sys.stderr, "err1"
del log
print "line to screen only"
Run Code Online (Sandbox Code Playgroud)

输出日志文件将包含:

16/11/2017 09:51:58 INFO - line1
16/11/2017 09:51:58 INFO - line2
16/11/2017 09:51:58 INFO - err1
Run Code Online (Sandbox Code Playgroud)

知道如何编写这个 Log 类,保持“日志”包(时间戳,...)的优势吗?

python logging stdout tee

2
推荐指数
1
解决办法
6773
查看次数