#!/usr/bin/env python import os import os.path import shutil import subprocess import sys #Version Feb. 25, 2020 # Run drawtree as a command #Synopsis: drawtree.py treefile uselen lableorient lableangle rotation # iterate angleofarc regularization charheight outformat outfile #Convert arguments to variables TREEFILE = sys.argv[1] USELEN = sys.argv[2] LABLEORIENT = sys.argv[3] LABLEANGLE = sys.argv[4] ROTATION = sys.argv[5] ITERATE = sys.argv[6] ANGLEOFARC = sys.argv[7] REGULARIZATION = sys.argv[8] FONTFILE = sys.argv[9] CHARHEIGHT = sys.argv[10] OUTFORMAT = sys.argv[11] OUTFILE = sys.argv[12] # Make a temporary directory in which to run the program STARTDIR = os.getcwd() TEMPDIR = "DRAWTREE." + str(os.getpid()) os.mkdir(TEMPDIR) shutil.copyfile(TREEFILE, os.path.join(TEMPDIR, "intree")) os.chdir(TEMPDIR) #----------------- generate keyboard input to send to program ----- comfile_h = open('DrawtreeComfile', 'w') if OUTFORMAT in ("l", "m", "j", "f", "a", "z", "p", "x", "v", "e", "c", "t", "o", "b"): # choose an output file format comfile_h.write("P\n") comfile_h.write(OUTFORMAT + "\n") # some output formats require additional specifications if OUTFORMAT == "j": # Hewlett Packard Laserjet comfile_h.write("n\n") comfile_h.write("2\n") #Resolution 150 dpi elif OUTFORMAT == "p": # PC Paintbrush PCX format comfile_h.write("n\n") comfile_h.write("3\n") #Resolution VGA 1024 x 768 elif OUTFORMAT == "x": #X11 bitmap comfile_h.write("n\n") comfile_h.write("1024\n") #X resolution comfile_h.write("512\n") #Y resolution # all others, no extra specs. needed # Turn off X-windows display comfile_h.write("v\n") comfile_h.write("n\n") # Tree parameters if USELEN == "no": comfile_h.write("b\n") comfile_h.write("l\n") comfile_h.write(LABLEORIENT + "\n") if LABLEORIENT == "f": comfile_h.write(LABLEANGLE + "\n") comfile_h.write("r\n") comfile_h.write(ROTATION + "\n") # Iterate - default is Equal-Daylight; do nothing if ITERATE == "In": comfile_h.write("i\n") elif ITERATE == "No": comfile_h.write("i\n") comfile_h.write("i\n") comfile_h.write(ANGLEOFARC + "\n") if REGULARIZATION == "reg": comfile_h.write("g\n") comfile_h.write("c\n") comfile_h.write(CHARHEIGHT + "\n") comfile_h.write("y\n") #accept current settings and write plotfile comfile_h.close() #--------------------- Run Drawtree ---------------------- shutil.copyfile(FONTFILE, "fontfile") comfile_h = open('DrawtreeComfile', 'r') os.nice(10) p_drawtree = subprocess.Popen(["drawtree"], stdin=comfile_h) p_drawtree.wait() os.nice(0) os.chdir(STARTDIR) shutil.move(os.path.join(TEMPDIR, "plotfile"), OUTFILE) shutil.rmtree(TEMPDIR)