Returning Result Of An External Script To Vba
Solution 1:
Answer extracted from question:
I got it working!
I was able to call my Python script using the result = MacScript(command)
function where I defined my command
as the following:
command = "do shell script """ & pyPath & "python " & getURLpath & "getURL.py --formula '" _
& Latex_Str & "' --fontsize " & Font_Size & " " & WebAdd & """"
My Python script is called getURL.py
, and handles the request to the server based on the optional arguments --formula
and --fontsize
defined by the user and stored in VBA as Latex_Str
and Font_Size
respectively, and the web address of the server WebAdd
. I also added some functionality to my Python script to handle passing proxy settings. The above command passed through MacScript
returns the stdout of the Python script, which is the return from the server. The Python script is as follows:
# Import the required librariesfrom urllib import urlencode
from urllib2 import Request, urlopen, URLError, ProxyHandler, build_opener, install_opener
import argparse
# Set up our argument parser
parser = argparse.ArgumentParser(description='Sends LaTeX string to web server and returns meta data used by LaTeX in Word project')
parser.add_argument('webAddr', type=str, help='Web address of LaTeX in Word server')
parser.add_argument('--formula', metavar='FRML', type=str, help='A LaTeX formula string')
parser.add_argument('--fontsize', metavar='SIZE', type=int, default=10, help='Integer representing font size (can be 10, 11, or 12. Default 10)')
parser.add_argument('--proxServ', metavar='SERV', type=str, help='Web address of proxy server, i.e. http://proxy.server.com:80')
parser.add_argument('--proxType', metavar='TYPE', type=str, default='http', help='Type of proxy server, i.e. http')
# Get the arguments from the parser
args = parser.parse_args()
# Define formula string if inputif args.formula:
values = {'formula': str(args.fontsize) + '.' + args.formula} # generate formula from argselse:
values = {}
# Define proxy settings if proxy server is input.if args.proxServ: # set up the proxy server support
proxySupport = ProxyHandler({args.proxType: args.proxServ})
opener = build_opener(proxySupport)
install_opener(opener)
# Set up the data object
data = urlencode(values)
data = data.encode('utf-8')
# Send request to the server and receive response, with error handling!try:
req = Request(args.webAddr, data)
# Read the response and print to a file
response = urlopen(req)
print response.read()
except URLError, e:
ifhasattr(e, 'reason'): # URL error case# a tuple containing error code and text error messageprint'Error: Failed to reach a server.'print'Reason: ', e.reason
elifhasattr(e, 'code'): # HTTP error case# HTTP error code, see section 10 of RFC 2616 for detailsprint'Error: The server could not fulfill the request.'print'Error code: ', e.code
# print e.read()
If anyone is curious, the full code will be available on the project page once I am done fixing a couple additional bugs and testing it. The (working) Windows version is already up there.
Post a Comment for "Returning Result Of An External Script To Vba"