J'ai un fichier problem.m qui a une fonction comme celle-ci: myfun(p,m)
.Comment appeler une fonction d'octave à partir de python?
Il effectue un calcul et renvoie le résultat. Pour tester l'exécution de cette fonction, j'ai un fichier test.m qui ressemble à ceci.
myfun(myarg1,myarg2)
Si je lance ce fichier comme: octave test.m
Ensuite, il me renvoie le résultat correct qui ressemble à ceci: 0,38007
Maintenant, le problème est lorsque vous appelez cette fonction myfun (p, m) à l'aide python. J'ai essayé d'utiliser la bibliothèque de python: oct2py
Le code python ressemble à ceci:
import sys
import subprocess
import oct2py
import requests
from oct2py import octave
def myfun(p,m):
octave.addpath('/mypath');
oc = oct2py.Oct2Py()
#res = octave.myfun(p,m nout=1);#this didn't work, hence comment
#res = oc.myfun(p, m) #this didn't work, hence comment
x = oc.feval("myfun",p,m);
print(x);
if __name__ == '__main__':
myfun(sys.argv[1],sys.argv[2])
Quand je lance ce code comme: python FileName.py arg1 arg2 (mêmes arguments i utilisés dans test.m), il me donne un message d'avertissement et une liste vide comme ceci:
avertissement: certains éléments dans la liste des valeurs de retour ne sont pas définies []
Je ne sais pas quoi faire à ce sujet. Comme la fonction semble renvoyer un résultat correct dans un format correct lors de l'utilisation d'octave. mais pour une raison quelconque, oct2py ne fonctionne pas.
Votre fonction Octave renvoie-t-elle réellement une sortie ou l'imprime-t-elle simplement dans la fenêtre de commande? S'il vous plaît voir [mcve]. – excaza
ma fonction d'octave retourne une sortie, comme je peux voir ans en octave-cli comme ceci: octave: 1> mytest timeBSeuCallUI = 2.6464e-04 1.5133e + 00 NaN relerrBSeuCallUI = 2.7459e -05 6.2769e-05 NaN ans = 2.6464e-04 octave: 2> ans ans = 2.6464e-04 – STZ
arguments du système sont toujours des chaînes. Si vous avez besoin d'entrées entières, vous devez les analyser en entier –