在本文中,我们将详细介绍在PHP中调用Python的各个方面,并为您提供关于在PHP中调用函数文件,计算圆的面积的相关解答,同时,我们也将为您带来关于C#中调用python、C++中调用Python脚
在本文中,我们将详细介绍在PHP中调用Python的各个方面,并为您提供关于在PHP中调用函数文件,计算圆的面积的相关解答,同时,我们也将为您带来关于C#中调用python、C++中调用Python脚本、C/C++中调用python代码的一个疑问、java中调用python脚本的有用知识。
本文目录一览:在PHP中调用Python(在PHP中调用函数文件,计算圆的面积)
如何解决在PHP中调用Python?
根据您在做什么,system()或popen()可能是完美的。如果Python脚本没有输出,或者您希望Python脚本的输出直接进入浏览器,请使用system()。如果要向Python脚本的标准输入中写入数据,或者从PHP中的Python脚本的标准输出中读取数据,请使用popen()。popen()仅允许您读取或写入,而不能两者都读取。如果两者都需要,请签出proc_open(),但是在程序之间进行双向通信时,您需要小心避免死锁,因为每个程序都在等待对方执行某项操作。
如果要将用户提供的数据传递给Python脚本,那么要注意的主要事情是命令注入。如果您不小心,您的用户可以向您发送诸如“; evilcommand;”之类的数据。并让您的程序违背您的意愿执行任意命令。
escapeshellarg()和escapeshellcmd()可以帮助解决这个问题,但是我个人喜欢使用类似以下的方法删除所有不是好的字符
preg_replace(''/[^a-zA-Z0-9]/'', '''', $str)
解决方法
我有一个最近写的Python脚本,我使用命令行中的某些选项进行了调用。我现在想要一个非常薄的Web界面在Mac上本地调用此脚本。
我不想在Mac上安装mod_python或mod_wsgi时遇到麻烦,所以我只想从PHP执行system()或popen()来调用Python脚本。
还有更好的主意吗?提前致谢!
C#中调用python
如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! !
为了记录自己的学习成果,防止遗忘,同时为了帮助在C#学习过程中遇到同样问题的同志们,所以将原版代码奉上!!!
开发环境:vs2015
准备工作:
下载并安装Ironpython
创建控制台应用程序
添加文本文件,并命名为test.py
添加引用:引用IronPython.dll,Microsoft.Scripting.dll 两个dll文件
控制台程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引用需要的命名空间
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
/*执行bin目录下test.py*/
/*ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象
.........
C++中调用Python脚本
下面是小编 jb51.cc 通过网络收集整理的代码片段。
小编小编现在分享给大家,也给大家做个参考。
需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了
先看Python的代码
#test function def add(a,b): print "in python function add" print "a = " + str(a) print "b = " + str(b) print "ret = " + str(a+b) return def foo(a): print "in python function foo" print "a = " + str(a) print "ret = " + str(a * a) return 把上面的Python代码存为pytest.py 接下来是c++ 的代码 代码: #include "Python.h" int main(int argc,char** argv) { // 初始化Python //在使用Python系统前,必须使用Py_Initialize对其 //进行初始化。它会载入Python的内建模块并添加系统路 //径到模块搜索路径中。这个函数没有返回值,检查系统 //是否初始化成功需要使用Py_IsInitialized。 Py_Initialize(); // 检查初始化是否成功 if ( !Py_IsInitialized() ) { return -1; } // 添加当前路径 //把输入的字符串作为Python代码直接运行,返回0 //表示成功,-1表示有错。大多时候错误都是因为字符串 //中有语法错误。 PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); PyObject *pName,*pModule,*pDict,*pFunc,*pArgs; // 载入名为pytest的脚本 pName = PyString_FromString("pytest"); pModule = PyImport_Import(pName); if ( !pModule ) { printf("can't find pytest.py"); getchar(); return -1; } pDict = PyModule_GetDict(pModule); if ( !pDict ) { return -1; } // 找出函数名为add的函数 pFunc = PyDict_GetItemString(pDict,"add"); if ( !pFunc || !PyCallable_Check(pFunc) ) { printf("can't find function [add]"); getchar(); return -1; } // 参数进栈 pArgs = PyTuple_New(2); // PyObject* Py_BuildValue(char *format,...) // 把C++的变量转换成一个Python对象。当需要从 // C++传递变量到Python时,就会使用这个函数。此函数 // 有点类似C的printf,但格式不同。常用的格式有 // s 表示字符串, // i 表示整型变量, // f 表示浮点数, // O 表示一个Python对象。 PyTuple_SetItem(pArgs,Py_BuildValue("l",3)); PyTuple_SetItem(pArgs,1,4)); // 调用Python函数 PyObject_CallObject(pFunc,pArgs); //下面这段是查找函数foo 并执行foo pFunc = PyDict_GetItemString(pDict,"foo"); if ( !pFunc || !PyCallable_Check(pFunc) ) { printf("can't find function [foo]"); getchar(); return -1; } pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs,2)); // PyObject_CallObject(pFunc,pArgs); Py_DECREF(pName); Py_DECREF(pArgs); Py_DECREF(pModule); // 关闭Python Py_Finalize(); return 0; }
编译选项,需要手动指定Python 的include 路径, 和链接接路径,
如果你的Python 版本号与我的不同,请修改为你自己的版本号.
以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。
C/C++中调用python代码的一个疑问
我希望在C++中设置一个给python调用的全局变量,比如:
python代码文件有两个,一个是hello.py,里面预存了一些无关信息;
另一个文件是print.py,代码就一句话:print(Key)
c++代码如下:
PyObject* pMod, *pDict, *pArg, *pName;
pMod = PyImport_ImportModule("hello");
pDict = PyModule_GetDict(pMod);
pArg = Py_BuildValue("s","welcome");
PyObject_SetAttrString(pMod,"Key",pArg);//设置Key的值为welcome
我希望加载print.py的时候,能把这个key打印出来,不知道该如何加载print.py,试了很多方法都不行。
java中调用python脚本
在java中调用python脚本有三种方式
【方式一】:
直接执行Python脚本代码 引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter(); 2 interpreter.exec("days=(''mod'',''Tue'',''Wed'',''Thu'',''Fri'',''Sat'',''Sun''); "); ///执行python脚本
【方式二】:
执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter(); 2 InputStream filepy = new FileInputStream("D:\\demo.py"); 3 interpreter.execfile(filepy); ///执行python py文件 4 filepy.close();
【方式三】:
对于前两种方式可能存在以下问题:
当python调用第三方函数库的时候,不能调用。但是通过第三种方式可以解决。
直接上代码:
1.java代码部分
public static void Test1() throws Exception {
//TODO:执行python脚本
System.out.println("start python");
//需传入的参数
String a = "aaa", b = "bbb", c = "ccc", d = "中国";
// System.out.println("start;;;" + a);
//设置命令行传入参数
String[] argv = new String[] { "python", "data/pythonScrip/test1.py", a, b, c, d };
Process pr = Runtime.getRuntime().exec(argv);
System.err.println("pr:"+pr);
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));
System.err.println("in:"+in);
String line;
// System.err.println(in.lines().count());
while ((line = in.readLine()) != null) {
System.out.println("line:"+line);
}
in.close();
pr.waitFor();
System.out.println("end");
}
2.python代码部分(test1.py)
import sys
print("======")
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])
print(sys.argv[4])
3.输出结果
调用第三方函数库案例
1.java代码部分
public static void Test1() throws Exception {
//TODO:执行python脚本
System.out.println("start python");
//需传入的参数
String a = "F:/6-日志/20170822_主题相关进阶/Demo/w2v_java_call/bd/w2v_bd.model", b = "一带一路";
// System.out.println("start;;;" + a);
//设置命令行传入参数
String[] argv = new String[] { "python", "data/pythonScrip/w2v_java.py", a, b};
Process pr = Runtime.getRuntime().exec(argv);
System.err.println("pr:"+pr);
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));
System.err.println("in:"+in);
String line;
// System.err.println(in.lines().count());
while ((line = in.readLine()) != null) {
System.out.println("line:"+line);
}
in.close();
pr.waitFor();
System.out.println("end");
}
2.Python代码部分
from gensim.models import word2vec #调用第三方函数库
import sys
# def get_vector(word,model):
print (sys.argv[0]) #读取动态参数,作为python脚本的输入
print (sys.argv[1])
print (sys.argv[2])
model = word2vec.Word2Vec.load(sys.argv[1])
vector=model[sys.argv[2]]
print(vector)
输出结果
关于在PHP中调用Python和在PHP中调用函数文件,计算圆的面积的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于C#中调用python、C++中调用Python脚本、C/C++中调用python代码的一个疑问、java中调用python脚本的相关信息,请在本站寻找。
本文标签: