I’ve installed mono on my ubuntu box and I’m trying to start a processes which starts several other children processes using C# but the program has very strict requirements and isn’t starting correctly because of a environmental variable issues. When I call the program using backticks in perl it works fine. Can someone tell me how to emulate the backtick function in C#?
System.Diagnostics.ProcessStartInfo ps = new System.Diagnostics.ProcessStartInfo("bash");//perl /home/casey/Downloads/rosetta3.4/rosetta_tools/fragment_tools/make_fragments.pl tempsequence.fa
ps.RedirectStandardInput=true;
ps.RedirectStandardOutput = true;
ps.RedirectStandardError = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = ps;
ps.UseShellExecute = false;
proc.Start();
proc.StandardInput.WriteLine("cd "+ projectfolder+"/"+projectname+" ; perl /home/casey/Downloads/rosetta3.4/rosetta_tools/fragment_tools/make_fragments.pl tempsequence.fa;exit;");
proc.WaitForExit();
This is the error it generates when run under C# it runs fine in perl.
/home/casey/Downloads/sparks-x/bin/buildinp_query.sh: 4: [: /home/casey/Downloads/sparks-x: unexpected operator
/home/casey/Downloads/sparks-x/bin/psiblast.sh: 21: /home/casey/Downloads/sparks-x/bin/psiblast.sh: /blast/bin/blastpgp: not found
Traceback (most recent call last):
File "/home/casey/Downloads/sparks-x/bin/buildinp.py", line 255, in run1
buildinp(fphipsiss, fmat, finp)
File "/home/casey/Downloads/sparks-x/bin/buildinp.py", line 238, in buildinp
seq1, ssec1, phipsi1, Fphipsi = rdphipsi(fphipsiss)
File "/home/casey/Downloads/sparks-x/bin/buildinp.py", line 9, in rdphipsi
for line in file(fn):
IOError: [Errno 2] No such file or directory: 't001_.fasta.phipsi'
sparks failed!
no id specified. parsing filename instead.
INTERMEDIATE: tempsequence.fa
ID: t001 CHAIN: _
File for psipred not found! Generating from scratch instead.
picking fragments with options:
DEBUG: 1
add_pdbs_to_vall:
chain: _
cleanup: 1
exclude_homologs_by_pdb_date: 0
f: tempsequence.fa
fastafile: t001_.fasta
homs: 1
id: t001
n_candidates: 1000
n_frags: 200
old_name_format: 0
pick_frags: 1
porter: 0
porter_file:
psipred: 1
psipred_file:
rundir: /media/d5ad6bd2-65b3-498f-8355-5b2c55ee42b2/top10demo/automate/projects/showerror
runid: t001_
sam: 0
sam_file:
torsion_bin: 0
--------------------------------------------------------------------------------
FILENAME: t001_.fasta
Sequence: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
running sparks for phi, psi, and solvent accessibility predictions
/home/casey/Downloads/sparks-x/bin/buildinp_query.sh t001_.fasta
running psiblast for sequence: t001_.fasta
At line 180 of file phipsi_ss0.f
Fortran runtime error: Bad real number in item 3 of list input
Aborting: Can't run first SS0 predictor
Error in file: t001_.fasta.phipsi
The problem here, I think, is that the process created by
System.Diagnosticshas a default EnvironmentVariables ofnull. In looking at the definition for System.Diagnostics.ProcessStartInfo() here:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.aspx
EnvironmentVariables property is described thusly:
And, looking further, the EnvironmentVariables documentation is here:
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.environmentvariables.aspx
With the excerpt:
So the “bash” shell you are spawning has no environment variables at all. If you are expecting certain things to be on the PATH or visible to your shell, you will need to make sure they are set. Alternately, you could use absolute paths for everything.
From the example the following code adds a TempPath environment variable:
You must set the UseShellExecute property to false to start the process after changing the EnvironmentVariables property.