2012-07-12 70 views
0
我目前使用這個調用server.py,這是建立在以下方式

子過程POPEN功能

import sys 
import os 
import distutils 
import shutil 
import nuke 

def imageScale(source,destination,scale): 
    myRead = nuke.createNode("Read") 
    #SET VALUES 
    myRead["file"].setValue(source) 
    myRead["selected"].setValue(True) 
    #CREATE REFORMAT 
    myReformat = nuke.createNode("Reformat") 
    #SET VALUES 
    myReformat["type"].setValue("scale") 
    myReformat["scale"].setValue(scale)#.75) 
    #SELECTION 
    myRead["selected"].setValue(False) 
    myReformat["selected"] .setValue(True) 
    #CREATE WRITE 
    myWrite = nuke.createNode("Write") 

    #SET VALUES 
    myWrite["file"].setValue(destination) 
    myWrite["file_type"].setValue("png") 
    myWrite["channels"].setValue("rgba") 
    myWrite["name"].setValue("temp") 
    nuke.execute("temp",1,1,1) 

我將能夠使用subprocess.popen來傳遞參數給

import subprocess 
    subprocess.Popen(['C:\Program Files\Nuke6.1v3\\Nuke6.1.exe', '-t', 'C:\Users\user\Desktop\\server.py' 

我的imageScale函數,即我直接從子進程傳遞參數源,目標和縮放比例

回答

2

簡短的回答是肯定的。你想從你的server.py中的sys.argv讀取參數。

但是,如果你知道你有一個Python函數,知道你會從Python中調用它,我會看看

import multiprocessing 
import server 

p = multiprocessing.Process(target=server.imageScale, args=(source,destination,scale)) 
p.start() 
p.join() 

除了更加美觀,你可以自由地做其他的東西在開始和加入之間。

編輯:其實,我只是假設Nuke會用參數做正確的事情。不能保證它會,所以第二個策略可能也是更好的原因。

+0

雖然我必須使用Nuke6.1.exe for server.py才能正常工作 – user2315 2012-07-12 19:56:06

0

subprocess只是執行一個進程,並允許與新進程通過參數和管道進行通信,但它不能做任何事情。如果你想達到這個目標,你需要一個包裝來與父程序進行通信並調用imageScale()函數。