我将在这里非常具体,希望了解这一点的人可以编辑以重新描述一般情况.
目前,当您运行"node debug"时,它会生成一个进程以侦听端口5858.然后在父进程中,尝试连接到该端口.
但是,如果您正在运行另一个"节点调试"会话,则当前"节点调试"会挂起,因为该端口正在使用中.
特别是您看到的消息是:
$ node debug example/gcd.js 3 5
< debugger listening on port 5858 >
connecting...
Run Code Online (Sandbox Code Playgroud)
最好是检测端口正在使用中(没有连接到它可能会弄乱另一个尝试连接现有调试器的客户端).
编辑:已接受的解决方案现在在trepanjs中.
我正在使用使用pyflakes的SublimePythonIDE.我希望忽略一些错误,例如:
(E501) line too long
Run Code Online (Sandbox Code Playgroud)
(E101) indentation contains mixed spaces and tabs
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
我下载了一个存档文件.在存档中将有一个文件,其中包含.sh.延期.当我用VI打开该文件时,我在文件的开头找到了以下代码:
#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1
Run Code Online (Sandbox Code Playgroud)
我可以通过执行java -jar file或"./file" 来运行jar .
有人可以解释一下发生了什么吗?你怎么能创建这样的文件?
如果解释器正在运行 pyston、jython、ironpython、pypy 等,我想从正在运行的 Python 程序内部进行测试。
想到的事情是模式匹配system.version和检查来自 的幻数imp.get_magic()但是这两者似乎都有些脆弱和笨拙。还有其他建议吗?
编辑: user2357112 再次通过。
我尝试在我安装的每个 Python 版本上运行以下代码,这区分了 Jython、Pyston 和各种 CPython。它失败的地方是 2.6 之前的 Python,以及 CPython 的 anaconda 变体。对于 anaconda 来说,这可能是正确的。
这是程序和结果。请随意注意这对哪些其他类型的 Python 有效或无效。
import platform
print(platform.python_implementation())
Run Code Online (Sandbox Code Playgroud)
和shell脚本:
for v in $(pyenv versions); do # not quite right
pyenv local $v
echo "version is $v"
python /tmp/foo.py
echo "==================="
done
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出:
===================
version is 2.1.3
Traceback (most recent call last):
File "/tmp/foo.py", line 1, in ?
import platform
ImportError: No module named …Run Code Online (Sandbox Code Playgroud) 我正在尝试捕获 Bash 中的一些输入正则表达式,但 BASH_REMATCH 为空
#!/usr/bin/env /bin/bash
INPUT=$(cat input.txt)
TASK_NAME="MailAccountFetch"
MATCH_PATTERN="(${TASK_NAME})\s+([0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2})"
while read -r line; do
if [[ $line =~ $MATCH_PATTERN ]]; then
TASK_RESULT=${BASH_REMATCH[3]}
TASK_LAST_RUN=${BASH_REMATCH[2]}
TASK_EXECUTION_DURATION=${BASH_REMATCH[4]}
fi
done <<< "$INPUT"
Run Code Online (Sandbox Code Playgroud)
我的输入是:
MailAccountFetch 2017-03-29 19:00:00 Success 5.0 Second(s) 2017-03-29 19:03:00
Run Code Online (Sandbox Code Playgroud)
通过调试脚本(VS Code+Bash ext),我可以看到当代码进入 IF 内部时 INPUT 字符串匹配,但 BASH_REMATCH 并未填充我的两个捕获组。
我上线了:
GNU bash, version 4.4.0(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
稍后编辑
接受的答案
接受最具解释性的答案。
最终解决了这个问题:
bashdb/VS Code 环境导致空 BASH_REMATCH。该代码单独运行时工作正常。
给定一个C Python框架指针,我如何查看任意评估堆栈条目?(某些特定的堆栈条目可以通过找到locals(),我说的是其他堆栈条目。)
不久前,我问了一个更广泛的问题:
但是在这里,我想着重于能够在运行时读取CPython堆栈条目。
我将采用在CPython 2.7或Python 3.3之后的任何Python上均可使用的解决方案。但是,如果您还有其他工作要解决,请分享,如果没有更好的解决方案,我将接受。
我宁愿不修改C Python代码。实际上,在Ruby中,我这样做是为了获得想要的东西。我可以根据经验说,这可能不是我们想要的工作方式。但是,如果没有更好的解决方案,我会考虑的。(我对SO点的理解是,无论哪种方式,我都会以失败的方式失去它。因此,我很高兴看到它表现出最大的精神和意愿去看待这一点(假设它可行)的人。)
更新:请参阅user2357112 tldr的注释;基本上,这是很难做到的。(不过,如果您认为自己有尝试的勇气,请务必这样做。)
因此,让我将范围缩小到我认为可行的这个更简单的问题:
给定python堆栈框架(如)inspect.currentframe(),找到评估堆栈的开始。在C版本的结构中,这是f_valuestack。然后,我们需要使用Python中的一种方法从那里读取Python值/对象。
更新2好赏金的期限已经结束,没有人(包括我自己的简要答案)提供具体的代码。我觉得这是一个良好的开始,现在我对情况的了解比以前要多得多。在强制性的“描述为什么您应该有赏金的描述”中,我列出了其中一种选择,“以引起更多对这个问题的关注”,并且在某种程度上,对于先前化身的看法少于十二种。问题,当我键入此内容时,它已经被查看了不到190次。所以这是成功的。然而...
如果将来有人决定进一步进行此操作,请与我联系,我将设立另一个赏金。
谢谢大家
我正在继续 Ned Batchelder 的 byterun 代码,这是一个用 Python 编写的 Python 解释器,适用于 Python 3.4 以外的 Python 版本。请参阅x-python。
这种方法的长期关注点之一是将导入中的解释器命名空间与解释的程序命名空间分开。
旁白:如果您想要不解释为导入模块的快速解释器,那么不分离命名空间可能是有利的,但是分离模块更正确,尽管速度较慢,并且在解释来自不同 Python 版本的字节码时是必要的。
因此,当解释器遇到IMPORT_NAME操作码时,我想importlib.util基本上拥有一个与解释器遇到的任何导入不同的模块副本。
我现在遇到的问题是这些导入方式不同,这可以使用hasattr().
这是一个例子:
import importlib
module_spec = importlib.util.find_spec("textwrap")
textwrap_module = importlib.util.module_from_spec(module_spec)
submodule = "fill"
print(hasattr(textwrap_module, submodule)) # False
import textwrap
print(hasattr(textwrap, submodule)) # True
Run Code Online (Sandbox Code Playgroud)
我如何使用 获得相同的行为importlib.util?
(但是我应该注意,对于sys,两者都可以找到“path”子模块作为 的属性sys。)
我一直在寻找并且无法找到任何可以帮助我反编译Python 3.5的东西.有谁知道吗?
考虑以下两个示例:
x = 1; y = 2; z = 3
Run Code Online (Sandbox Code Playgroud)
和:
for i in range(3): print(i)
Run Code Online (Sandbox Code Playgroud)
在后者中,如果在像pdb这样的调试器中逐步进行调试,则它将print(i)在循环的每次迭代时停止在。
但是,在第一个示例中,它停止了一次。
进一步调查,分解多语句行,我们发现实际上第一行有两个条目co_lnotab。但是dis.dis()谎言。
至于对循环有只是在一个行lnotab,但你停在每个互为作用的地方,偏移10,是在一个跳转的目标。那么,即使行号没有更改,是什么触发了停止操作?
import dis
>>> x = compile('x = 1; y = 2; z = 3', 'foo', 'exec')
>>> x.co_lnotab
b'\x04\x00\x04\x00'
>>> dis.dis(x)
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (2)
6 STORE_NAME 1 (y)
8 LOAD_CONST 2 (3)
10 STORE_NAME 2 (z)
12 LOAD_CONST …Run Code Online (Sandbox Code Playgroud) python ×4
bytecode ×2
node.js ×2
python-3.x ×2
shell ×2
anaconda ×1
bash ×1
cpython ×1
decompiler ×1
disassembly ×1
jar ×1
java ×1
jython ×1
pdb ×1
pyflakes ×1
pypy ×1
python-3.5 ×1
regex ×1
sockets ×1
sublimetext ×1
trace ×1
trepan ×1
version ×1