我正在使用 Python 子进程在 Windows 7 上运行外部脚本。我正在尝试获取退出代码。
在情况 1 中,我运行一个 python 脚本test1.py。
测试1.py
import sys
sys.exit(24) <--exit code
Run Code Online (Sandbox Code Playgroud)
myscript1.py
import subprocess
process = subprocess.Popen(["python", "C:\\path\\to\\test1.py"], stdout=subprocess.PIPE)
process.wait()
print process.returncode
Run Code Online (Sandbox Code Playgroud)
在 Windows 命令提示符中,当我运行脚本时,我得到以下输出:
>python test1.py
>
>echo %errorlevel%
>24
>
>python myscript1.py
>24
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到在这种情况下子进程能够获得正确的退出代码。
在情况 2 中,我运行一个批处理文件test2.cmd。
测试2.cmd
EXIT /B 56 <--exit code
Run Code Online (Sandbox Code Playgroud)
myscript2.py
import subprocess
process = subprocess.Popen(["C:\\path\\to\\test2.cmd"], stdout=subprocess.PIPE)
process.wait()
print process.returncode
Run Code Online (Sandbox Code Playgroud)
在 Windows 命令提示符中,当我运行脚本时,我得到以下输出:
>test2.cmd
>
>echo %errorlevel%
>56
>
>python myscript2.py
>56
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到在这种情况下子进程也能够获得正确的退出代码。
在案例 3 …
我正在使用 jython 2.7 和 java,目的是围绕我的 jar 文件创建一个 python 包装器(我们称之为myJar.jar)
这是我的 python 文件:
import sys
sys.path.append('/pathTo/myJar.jar')
from java.lang import Math #this works
from java.io import File # this works`
from com.myPackage.classes import myClass
print('trying to import myClass')
Run Code Online (Sandbox Code Playgroud)
我运行以下命令来执行此代码:
java -jar ~/pathTo/jython.jar jyTest.py
我收到一个 importError 说明:ImportError: No module named myPackage
除了使用之外sys.path.append(),我还尝试过:
java -jar ~/pathTo/jython.jar -Dpython.path=/pathTo/myJar.jar jyTest.py
和
java -cp ~/pathTo/jython.jar:~/pathTo/myJar.jar jyTest.py
和
java -classpath ~/pathTo/myJar.jar -jar ~/pathTo/jython.jar jyTest.py
我还尝试使用java -cp导出myJar.jar到$CLASSPATH.
上述方法均无效。 …
我正在尝试使用 PythonInterpreter 在 java 代码(在 Netbeans 中)中使用 python 代码中的函数,当 python 代码中没有任何导入的包时它工作得很好,但是在我的代码中,有一个包需要导入“tweepy “我收到一个错误:
import org.python.util.PythonInterpreter;
import org.python.core.*;
public class test {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("python_code.py");
PyFunction getCountFunc = (PyFunction)interpreter.get("funcTw", PyFunction.class);
PyObject pyCount = getCountFunc.__call__(new PyString("Test String"));
String realResult = (String) pyCount.__tojava__(String.class);
}
}
Run Code Online (Sandbox Code Playgroud)
try:
import json
except ImportError:
import simplejson as json
import tweepy
import sys
def funcTw(str):
# function body ...
Run Code Online (Sandbox Code Playgroud)
Exception in thread "main" Traceback (most recent call …Run Code Online (Sandbox Code Playgroud) 我很难确定文本电子邮件的正文是否为base64编码.如果它然后使用这行代码; 利用jython 2.2.1
dirty=base64.decodestring(dirty)
Run Code Online (Sandbox Code Playgroud)
否则继续正常.
这是我的代码.哪些代码行允许我从电子邮件中提取此内容:
"Content-Transfer-Encoding:base64"
import email, email.Message
import base64
def _get_email_body(self):
try:
parts=self._email.get_payload()
check=parts[0].get_content_type()
if check=="text/plain":
part=parts[0].get_payload()
enc = part[0]['Content-Transfer-Encoding']
if enc == "base64":
dirty=base64.decodestring(dirty)
elif check=="multipart/alternative":
part=parts[0].get_payload()
enc = part[0]['Content-Transfer-Encoding']
if part[0].get_content_type()=="text/plain":
dirty=part[0].get_payload()
if enc == "base64":
dirty=base64.decodestring(dirty)
else:
return "cannot obtain the body of the email"
else:
return "cannot obtain the body of the email"
return dirty
except:
raise
Run Code Online (Sandbox Code Playgroud)
好了,这个代码现在可以使用!谢谢大家
这是一个高级概念性问题.我有两个单独的代码库,用于相同的目的,一个用Python构建,另一个用Ruby构建.我需要开发一些可以在JVM上运行的东西.所以我有两个选择:将Python代码转换为Jython或将Ruby转换为JRuby.由于我不知道他们中的任何一个,我想知道是否有人可以给我一些指导.喜欢哪一个运行得更快,或者更重要的是哪一个有可用于轻松进行代码迁移的工具(.pyc到.jar文件)?
我经常遇到想要为我无法控制的类添加其他方法的问题.例如,我可能想要一个prettyPrint可以在没有统一api的不同对象类型上运行的函数(例如特殊__str__方法).
在Nice语言和R实现这一使用多方法,避免了访问者模式很好.例如,R有plot()功能.各个程序员可以创建新类来定义数据类型(例如,网络图或股票行情数据).然后,辅助用户/程序员可以编写绘图功能来填写功能,即使他们无法访问图表或股票代码或其他绘图功能的代码.
鉴于我想在以后添加许多功能,使用class.method()似乎不可行.class_plot()每种类型的许多功能似乎也是一个坏主意.定义一个plot()检查类型的大函数是不可扩展的.
什么是多方法的替代方案?特别是,我对可能在Jython和Scala中工作的设计感兴趣.
我有一个用Python 2.6编写的大型基础架构,尽管缺乏向后兼容性,我最近还是尝试移植到3.1(比我预期的要平滑得多).
我最终希望将一些Python代码与我们拥有的许多基于Java的代码集成在一起,并且正在考虑尝试使用Jython.但是,从查看Jython教程,所有示例都是2.6语法(例如,print还不是函数).
Jython目前还是在不久的将来会支持Python 3.x语法吗?或者如果我想最终使用Jython,我应该回滚到2.6吗?
我正在尝试使用Windows的复制命令,我们有目录,如c:\oracle.
在尝试执行此类操作时,我们收到以下错误:
source_file=folder+"\"
^
SyntaxError: Lexical error at line 17, column 23. Encountered: "\r" (13), after : ""
Run Code Online (Sandbox Code Playgroud)
这里的文件夹是我的c:\ oracle的路径,并在尝试向其添加文件时:
source=folder+"\"+src_file
Run Code Online (Sandbox Code Playgroud)
我无法这样做.关于如何解决这个问题的任何建议?
我试过/但是我的副本窗口调用源代码os.command正在获取"the syntax is incorrect"并且解决它的唯一方法是使用\但是我在这样做时遇到上述错误.
请建议.谢谢你的帮助
谢谢.
我正在考虑将科学代码从Python移植到Jython,我感兴趣的是,是否存在Jython的数学库,它们是:
机器学习和统计路线的额外可用性将是一个优势(或者可以轻松地将数据转换为某些通用数据格式,主要Java机器学习库可以理解).
提前感谢您提供有关此类库的任何信息.