The recommended way to do this is to use IronPython. There is another answer which goes over the basics of using IronPython to access Python code from C#: How do I call a specific Method from a Python Script in C#?
If IronPython isn't a choice, as you mentioned, you can alternatively run the function from the command line and pass in the arguments as needed, though for anything complex this could turn into spaghetti. Below is a basic example of running a python function in a module directly from the command line:
python -c 'import foo; print foo.hello()'
So to run the above in C#:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "python.exe";
startInfo.Arguments = "-c import foo; print foo.hello()";
process.StartInfo = startInfo;
process.Start();
Note that if you are trying to get a return value back, in this case you will have to print the data to the console and then serialize the output from C# as you see fit. This can be potentially problematic if the function outputs anything to the console on it's own, unless you filter it out or there is an option for suppressing the output from that function.