Script python in vbscript

ho inserito poche righe di codice python in un tasto di rhino
ovviamente preceduto da “! _-RunPythonScript (”
e qui tutto funziona

poi ho pensato di eseguire il comando all’interno di un VBScript
usando Rhino.Command ma non riesco a trovare la sintassi giusta
vuole import su una “new line” ho provato sia con vbcrlf che 13+10 ascii
ma nulla da fare qualche suggerimento in merito?

ma in un tasto di Rhino usando ! _-RunPythonScript e poi indirizzo del file PY
a questo punto ad ogni tasto deve corrispondere un unico file PY giusto?
è diverso dal file RVB che viene caricato e poi ci si va a prelevare la sub.

Si’, e’ diverso.
Ma puoi fare la stessa cosa usando import e poi richiamando la funzione,
ma tutto con un singolo RunPythonScript.
Quindi per ogni pulsante, importi e poi richiami.

… Non so se e’ chiaro …

ciao Emilio

la spiegazione è chiarissima
ma la sintassi?

qui ormai non ci capisco più nulla avviare python con la sintassi vbscript un macello :slight_smile:

ho cercato qualche esempio sul web e google mi ha risposto: “ma una cosa normale non la chiedi mai?”
ahahahah

Ciao Salvio

:smile: :smile: :smile:

No, dai, questa volta la domanda mi sembra normalissima.
Parli del problema di inserire -RunPythonScript dentro Rhino.Command ?

Se il problema e’ andare a capo, col VBS usavo vbnewline

Oppure c’e’ qualcos’altro che non va ?

potresti postare anche la sintassi? perché richiamo il file ma la singola funzione mi da errore

La sintasi e’ normale sintassi Python inserita in -RunPythonScript

Ad esempio, questo e’ un pulsante che uso regolarmente :

-runpythonscript (
import c5_paint3
c5_paint3.paint( 0, 255, 255 )
)

Poi gli errori possono essere di diverso tipo.
Che errore ti da’ ?

io nel tasto ho messo questa sintassi:
! _-RunPythonScript (
c:/file.py
)

e funziona mi compare un msgbox OK

ora nello stesso file esiste una def
non riesco ad avviare la def come faccio?

Non ho mai provato a richiamare un file ‘in due modi’, cioe’ come script eseguibile e come modulo comprendente delle funzioni …
Ma forse funziona:

Copia l’esempio che mi hai fatto postare.
Che l’ho postato a fare allora ? :smile:

Dopo quello che hai nel pulsante prova mettere:

import c:/file
file.<NOME_DELLA DEF( PARAMETRI )>

Mannaggia a te !
Vuoi che ti scriva il testo e non mi dici nemmeno il nome della funzione ! :smile:

Comunque ‘di solito’ o usi uno script eseguibile, e allora scrivi quello che hai scritto tu,
oppure un modulo (che di per se’ non esegue nessuna istruzione, ma si limita a definire delle funzioni)
e allora lo importi e poi richiami la funzione.

… Io direi … ma una cosa normale non la fai mai ?

Ti devi sempre ingarbugliare in complicazioni assurde ?

:smile:

ahahaha a chi lo dici

avevo provato con import c:/file e poi file.test() ma non funziona

e avviare solo la def come faccio?

(da quello che ho capito import non lo vuole)

Aspetta … prima ho detto una cavolata.
Non puoi eseguire sia un file che una funzione da un singolo RunPythonScript, la sintassi cambai.

Se vuoi fare le due cose, devi usare due RunPythonScript, prova a scriverli in sequenza:
il primo senza parentesi per eseguire il file
e il secondo con le parentesi per richiamare la funzione ( perche’ in questo caso si tratta di istruzioni Python, non del nome di un file )

Come dicevamo sopra:

-runpythonscript (
import c5_paint3
c5_paint3.paint( 0, 255, 255 )
)

Se ti da’ errore, posta file, comando nel pulsante ed errore … :sweat: :smile:

il contenuto del file:

import Rhino
import rhinoscriptsyntax
rhinoscriptsyntax.MessageBox("hello!")
def test():
    rhinoscriptsyntax.MessageBox("test!")

contenuto tasto:

_-RunPythonScript c:\file.py

oppure

_-RunPythonScript (
c:\file.py
)

mi funzionano entrambe le sintassi

mi rimane solo chiamare la funzione test()
(non è necessario chiamare il file solo la def)
era solo per vedere che la sintassi era giusta

Importare con un percorso assoluto e’ un casino …
Figurati se tu non lo facevi subito … :smile:

Bisogna fare cosi’

import imp
ff = imp.load_source( 'module.name', 'c:\\file.py' )
ff.test()

Se invece (come tutti i cristiani :wink: ) metti il file dove RunPythonScript lo vede, dovrebbe bastare

import file.py
file.test()

avevo provato questa sintassi e avevo immaginato che bisognava inserire il file in una cartella specifica

cmq la prima soluzione l’ho provata e funziona benissimo grazie infinitamente

se non ci fossi, bisognerebbe inventarti. ahahahah grazie ancora e alla prossima :+1:

1 Mi Piace

ma quindi è una cosa che tu fai già da tempo?
ma con il command in VBS ho realizzato sintassi che richiamavano anche variabili
ma com’è che questa volta non riesco ad azzeccare la sintassi giusta per Python?

eseguire uno script per py, usando il Command in VBS con il comando _-RunPythonScript
in questo caso dovrei usare all’interno del comando la sintassi per VBS o per PY?

OK forse questa volta ci sono riuscito in VBS:

Dim test
test = "ciao!"

Rhino.Command "_-RunPythonScript " _
	& "rhinoscriptsyntax.MessageBox('" & test & "')"

mi sa che ho cantato vittoria troppo presto :frowning:

l’esempio postato si tratta di una riga, ma quando si tratta di uno script miltirighe è diversa la cosa :thinking:

Parlavo solo di inserire degli ‘a capo’ nelle stringhe VBS … Python non c’entra.

Perche’ ?
Cosa succede ?
Chiedo perche’ io (ovviamente :wink: ) non ho mai provato …
… E adesso non ho tempo di far prove … :unamused:

Sono riuscito a fare una prova.
Questo sembra che funzioni.
Nel pulsante ho scritto:

-runscript (
rhino.command " -runpythonscript (" & _
vbnewline & "aa = 22" & _
vbnewline & "print aa" & _
vbnewline & "print aa * 2" & _
vbnewline & ")"
)