小编Jon*_*ley的帖子

对于我使用Windows ftype和assoc机制选择正确的可执行文件的任何进程,都缺少stdin

我在WindowsXP上.这似乎影响了任何进程,但我将使用Python3.2来演示它.一个脚本'filter.py':

import sys
for line in sys.stdin:
    print(line)
Run Code Online (Sandbox Code Playgroud)

像这样运行:

echo hello | filter.py
Run Code Online (Sandbox Code Playgroud)

像这样打破:

Traceback (most recent call last):
  File "F:\Documents and Settings\jhartley\docs\projects\filtercwd\filter.py", line 3, in <module>
    for line in sys.stdin:
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)

果然,添加一个print来发现sys.stdin的值会报告它是None(和NoneType.)

或者,像这样运行它:

echo hello | python filter.py
Run Code Online (Sandbox Code Playgroud)

(使用python的显式调用)工作完全正常.

我的.py文件被连接起来使用关联和ftype机制使用Python执行(Windows关联特定文件扩展名的方式使用特定程序执行):

> assoc .py
.py=Python.File
> ftype Python.File
Python.File="F:\Python32\python.exe" "%1" %*
Run Code Online (Sandbox Code Playgroud)

(这是我路径上最重要的'python.exe')

更新:这不是Python的事情.如果我创建filter.sh,使用cygwin bash运行会发生同样的事情.显式运行'echo hello | bash filter.sh'工作正常,但'echo hello | filter.sh'通过assoc和ftype机制使用bash执行filter.sh,失败了'/ dev/stdin:没有这样的文件或目录'.

所以我必须将这个显式的'python'添加到我的所有命令行中?另外,我很好奇为什么它会破裂.这只是我机器的一些特点,还是其他人也看到了这个?

windows stdin pipe file-association

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

如何在Python 2.7中一次解码一行unicode?

从Python 2.7加载unicode文本的正确方法如下:

content = open('filename').read().decode('encoding'):
for line in content.splitlines():
    process(line)
Run Code Online (Sandbox Code Playgroud)

(更新:不,不是.请参阅答案.)

但是,如果文件非常大,我可能希望一次读取,解码和处理一行,这样整个文件永远不会一次加载到内存中.就像是:

for line in open('filename'):
    process(line.decode('encoding'))        
Run Code Online (Sandbox Code Playgroud)

for循环的在开放的文件句柄迭代是一个生成器,一次读取一行.

但这不起作用,因为如果文件是utf32编码的,那么文件中的字节(十六进制)看起来像:

hello\n = 68000000(h) 65000000(e) 6c000000(l) 6c000000(l) 6f000000(o) 0a000000(\n)
Run Code Online (Sandbox Code Playgroud)

并且由for循环完成的行分割在字符的0a字节上\n,导致(以十六进制):

lines[0] = 0x 68000000 65000000 6c000000 6c000000 6f000000 0a
lines[1] = 0x 000000
Run Code Online (Sandbox Code Playgroud)

因此,\n字符的一部分留在第1行的末尾,其余三个字节在第2行结束(后面是第2行中的任何文本.)decode可以理解地调用这些行中的任何一行都会导致a UnicodeDecodeError.

UnicodeDecodeError: 'utf32' codec can't decode byte 0x0a in position 24: truncated data
Run Code Online (Sandbox Code Playgroud)

因此,显然,在字节上拆分unicode字节流0a并不是将其拆分为行的正确方法.相反,我应该分裂出现完整的四字节换行符(0x0a000000).但是,我认为检测这些字符的正确方法是将字节流解码为unicode字符串并查找\n字符 - 这个完整流的解码正是我试图避免的操作.

这不是一个不常见的要求.处理它的正确方法是什么?

python unicode file-io generator python-2.7

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

应该发送哪些字符串来消除他们使用的字节编码的歧义?

我正在将字节流解码为unicode字符,而不知道每百个发送者使用过的编码.

许多发件人在技术上并不精明,并且无法告诉我他们正在使用什么编码.它将由他们用于生成数据的工具链的偶然事件决定.

目前,发件人使用各种操作系统,以英国/英语为基础.

我是否可以要求所有发件人向我发送一个特定字符串,这些字符将明确说明每个发件人使用的编码?

我知道有些库使用启发式来猜测编码 - 我也会追逐它,作为运行时回退,但首先我想尝试确定正在使用的编码,如果可以的话.

(不要认为它是相关的,但我在使用Python)

unicode encoding decoding

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

为什么 git reset &amp; push 在 remote 和 branchname 之间使用斜杠与空格?

在强制推送或强制更新之后,通常使用git reset来复制分支的所有远程更改。例如在 rebase 和 force push 之后

git push --force origin my_branch
Run Code Online (Sandbox Code Playgroud)

您的团队成员可以使用

git reset --hard origin/my_branch
Run Code Online (Sandbox Code Playgroud)

获取更新的分支。现在的问题是,为什么你必须指定一个斜线/git reset,但不适合git push

git version-control github

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

使用Auth0授权来自我们的SPA和其他后端服务的API请求

我们有一个单页应用程序,该应用程序调用我们的后端服务(C#和Python),并使用Auth0 SPA流授权这些请求。

我们的后端服务仅在处理SPA用户的请求的过程中相互发出请求,因此当前我们仅转发SPA请求中的Authorization标头,并使用它来授权对每个被调用服务的操作。

我现在想添加后端处理作业,这些作业将在我们的服务之间发出请求,并调用现有端点。这些请求将没有任何要转发的现有auth标头,因此需要构造它们自己的请求。

基于该Auth0文档,这里这里,我相信我应该使用一个客户端凭证授予授权这些要求,我推断,我们现有的端点将因此需要接受授权两种不同的方式请求:从SPA或其他服务。

问题在于,SPA中的JWT使用一个密钥进行签名,而服务中的JWT使用其各自的密钥进行签名。我是否需要配置端点,以便它们接受使用任何这些秘密密钥构造的JWT,对吗?

因此,我的核心问题是:这种理解正确吗,还是我应该以完全不同的方式来做?

细节:

我们的端点需要处理的两种类型的Authorization JWT令牌是:

来自我们SPA的1个请求,其中包括:

sub: SPA-USER-ID
aud: SPA-CLIENT-ID
Run Code Online (Sandbox Code Playgroud)

使用HS256的客户机密,使用HS256(出于历史原因)签名。

2个服务到服务的请求,其中包括:

sub: SERVICE-ID@clients
aud: API-ID
scope: ""
Run Code Online (Sandbox Code Playgroud)

使用我们的呼叫服务的客户机密使用HS256(为了使事情简单)进行签名。

如果一个端点要解码并验证两个请求,则首先将失败,因为“ aud”值不同。我认为我们现有SPA调用的“ aud”值是一个错误-应该是接收请求的API的ID。然后,两个请求中的“ aud”值将相同。

下一个区别是它们每个都使用不同的秘密密钥签名-SPA或呼叫服务的签名(如果我选择按照Auth0建议使用RS256进行新的服务调用,则也可能使用不同的算法)。

我找不到明显的方法来修改Python和C#快速入门以接受使用不同键编码的令牌。我正在考虑自己进行编码,以手动尝试其中一种,如果失败,则尝试另一种。我有信心可以为Python端点授权做这件事,我是根据PyJWT的Auth0快速入门编写的,但对我们的C#东西不太熟悉,C#的内容也基于Auth0快速入门,但似乎使用了一些内置功能.NET JWT验证中间件,我完全不确定是否可以添加上述功能。

但是,如果我以正确的方式进行操作,那么这肯定是常见的要求吗?

如果这个问题的格式不正确,我深表歉意,我对auth一无所知,并且正在阅读Auth0 / Oath2文档以在进行过程中弄清楚。

c# python access-token oauth-2.0 auth0

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

安装Python并在Windows 7上分发"写入失败...权限被拒绝"

我在Windows 7上(我完全承认我不了解权限模型.我正在其他标签中阅读它.)我的用户是管理员.当我尝试运行"python distribute_setup.py"时,我得到"写入失败...权限被拒绝"错误然后"错误:无法创建或删除安装目录中的文件".

我刚从python.org安装了Python 3.2.2 MSI安装程序.

我正在安装32位Python,即使我在64位Windows上,因为我将有一些需要它的依赖项(pyglet,一个OpenGL库.)

我下载distribute_setup.py并从命令行运行"python distribute_setup.py".

在大量无用文本的中途,这个喷出了一些隐藏的错误消息:

root: Generating grammar tables from E:\Program Files (x86)\Python3.2.2\Lib\lib2to3\PatternGrammar.txt
root: Writing grammar tables to E:\Program Files (x86)\Python3.2.2\Lib\lib2to3\PatternGrammar3.2.2.final.0.pickle
root: Writing failed:[Errno 13] Permission denied: 'E:\\Program Files (x86)\\Python3.2.2\\Lib\\lib2to3\\PatternGrammar3.2.2.final.0.pickle'
Run Code Online (Sandbox Code Playgroud)

这三行重复约二十次,然后:

Scanning installed packages
No setuptools distribution found
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: 'E:\\Program Files (x86)\\Python3.2.2\\Lib\\site-packages\\test-easy-install-5924.write-test'
Run Code Online (Sandbox Code Playgroud)

目录"E:\ Program Files(x86)\ Python3.2.2\Lib"允许管理员"完全控制".我的用户是管理员(并且选中的权限复选框都是灰色的 …

python permissions install distribute windows-7

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

从Python开始,可以解释函数和别名的shell

我编写了一个小*nix实用程序,每次检测到文件系统更改时都会'重新运行'给定的命令.所以我将命令作为引用参数运行,例如

rerun "my command"
Run Code Online (Sandbox Code Playgroud)

重新运行是用Python编写的,最后调用:

subprocess.call("my command", shell=True, executable=USERS_DEFAULT_SHELL)
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我的默认shell是'/ bin/bash'.但是,subprocess.call调用的shell不是"交互式"shell,因此无法识别我的.bashrc中定义的shell函数和别名.

man bash告诉我,为了启动交互式shell,我将'-i'传递给/ bin/bash.但是,可以预见,

subprocess.call(..., executable='/bin/bash -i')
Run Code Online (Sandbox Code Playgroud)

不起作用 - 它无法找到该名称的可执行文件.(即使它确实有效,我也试图为用户默认的shell设置此功能,而不仅仅是Bash.可能'-i'对所有其他shell都没有做同样的事情.)

我怎样才能从Python中执行"我的命令",就像用户在终端中键入它时所解释的一样?

python bash shell subprocess

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

为什么我的 pyglet 顶点列表和批次在 Windows 上可能非常慢?

我正在使用 pyglet 库在 python 中编写 opengl 代码。当我使用 pyglet.graphics.vertex_list 或 pyglet.graphics.batch 对象绘制到屏幕上时,与普通的旧 pyglet.graphics.draw() 或只是 glVertex() 调用相比,它们非常慢(~0.1 fps),这大约是对于相同的几何形状,帧速率为 40fps。在Linux中,vertex_list的速度与glVertex大致相同,这令人失望,批处理方法的速度大约是glVertex的两倍,这稍微好一点,但没有我希望的那么多。

python opengl pyglet

0
推荐指数
1
解决办法
1152
查看次数